Nachträgliches Laden einer Klasse.

nitsche

Mitglied
Moinsen,
eine kurze Frage.

Ich habe für ein Spiel diverse eigene ListenerKlassen geschrieben. Diese sind in meinem package soundboard.input.mouse, oder soundboard.input.keyboard etc. etc.

Meine Frage, ob folgendes möglich ist:
Java:
  public Listener createListener(String li_type){
    li_id++;

Listener li_new=(Listener) new  soundboard.input.mouse.MouseListener(so);

abhängig von li_type soll aber die passende klasse dynamisch geladen werden.

Zum Beispiel:

li_type = keyboard -->

Listener li_new = (Listener) new soundboard.input.keyboard.KeyboardListener(so);


li_type = mouse --->

Listener li_new = (Listener) new soundboard.input.mouse.MouseListener(so);


Jemand ne Idee?
 

Michael...

Top Contributor
Wenn Du's so machen willst, wie wär's mit einer Fallunterscheidung?

Wenn alle Listener das Interface Listener implementieren:
Java:
Listener li_new = null;
if (li_type.equals("mouse")
    li_new = new  soundboard.input.mouse.MouseListener(so);
else if (li_type.euqals("keyboard")
    li_new = new  soundboard.input.mouse.KeyboardListener(so);
 
G

Gastredner

Gast
Ich würde auch Refelction vorschlagen. Um den Umgang einfacher zu gestalten, könnte man die vorhandenen Listener-Typen in ein enum verpacken und die createListener-Methode damit arbeiten lassen.

Das Listener-Interface:
Java:
package listener;

public interface ISoundboardListener {

	public void doSomething(ISoundboardEvent event);
}
enum mit den verschiedenen Typen von Listenern:
Java:
package listener;

public enum SoundboardListenerType {

	MOUSE(MouseListener.class),
	KEYBOARD(KeyboardListener.class);

	private Class<? extends ISoundboardListener> listenerClass;

	private SoundboardListenerType(Class<? extends ISoundboardListener> listenerClass) {
		this.listenerClass = listenerClass;
	}

	public Class<? extends ISoundboardListener> getListenerClass() {
		return listenerClass;
	}
}
Methode zum Erzeugen neuer Listener (wichtig: Die Klassen, die das Interface implementieren, müssen in diesem Beispiel einen Konstruktor definieren, der einen String als Argument annimmt):
Java:
package main;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

import listener.ISoundboardListener;
import listener.SoundboardListenerType;

public class Main {

	private static int counter = 0;

	public static void main(String[] args) {
		ISoundboardListener[] listeners = new ISoundboardListener[10];
		for (int i = 0; i < listeners.length; i++) {
			listeners[i] = createListener(Math.random() >= 0.5 ? SoundboardListenerType.MOUSE : SoundboardListenerType.KEYBOARD);
		}
		for (ISoundboardListener l: listeners) {
			l.doSomething(null);
		}
	}

	public static ISoundboardListener createListener(SoundboardListenerType type) {
		try {
			Constructor<? extends ISoundboardListener> con = type.getListenerClass().getConstructor(String.class);
			ISoundboardListener listener = con.newInstance(String.valueOf(counter));
			counter++;
			return listener;
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
		return null;
	}
}
Die Fehlerbehandlung in createListener fehlt natürlich noch, aber das sollte als Beispiel für ein mögliches Vorgehen ausreichen.
 
Zuletzt bearbeitet von einem Moderator:
B

bygones

Gast
warum Reflection wenn alle Klassen schon zur COmpilezeit bekannt ?

ein simples if/else / enum oder was auch immer find ich hier sinnvoller, einfacher und nachvollziehbarer.

Nur wenn die entsprechenden Listener zur Compilezeit nicht existieren, dann bedarf es Reflection
 
G

Gastredner

Gast
Ja, vermutlich ist es auch ein wenig aufgeblasen. Allerdings denke ich, dass es so noch einfacher ist, weitere Listener hinzuzufügen. Wobei der Unterschied nicht gerade groß ist.
So oder so - statt String-Literalen würde ich ein enum verwenden, um die Art des Listeners zu bestimmen. Das verhindert Schreibfehler von vornherein.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
-horn- Array mit nicht fixer Größe möglich? Nachträgliches befüllen Java Basics - Anfänger-Themen 10
I Dateien aus dem Resource Folder laden Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
I SWT Plattformunabhängig laden - verschiedene SWT .jar laden Java Basics - Anfänger-Themen 0
C XML Datei speichern und laden Java Basics - Anfänger-Themen 18
J Alle Dateien aus einem Verzeichnis laden Java Basics - Anfänger-Themen 10
I Datei als Stream aus Ressource laden? Java Basics - Anfänger-Themen 2
M Tabellen- Daten laden Java Basics - Anfänger-Themen 2
K File (png) in Image laden Java Basics - Anfänger-Themen 3
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
S Bilder in .jar Datei laden Java Basics - Anfänger-Themen 10
M Datenbank in jTable Laden Java Basics - Anfänger-Themen 49
S Kann keine Bilder laden? Java Basics - Anfänger-Themen 9
C Problem: PC ohne Internet und keine Möglichkeit Programme zu laden Java Basics - Anfänger-Themen 5
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
L Fehler beim laden eines Icons Java Basics - Anfänger-Themen 3
L Resourcen laden klappt nicht Java Basics - Anfänger-Themen 2
L Speichern und Laden Java Basics - Anfänger-Themen 7
F File von Windowsfreigabe laden Java Basics - Anfänger-Themen 1
H Interface Objekte speichern und laden (serialisieren/deserialisieren) Java Basics - Anfänger-Themen 1
H Image laden Java Basics - Anfänger-Themen 4
B Image laden im GridBagLayout Java Basics - Anfänger-Themen 3
D Laden und leeren von Comboboxen Java Basics - Anfänger-Themen 8
D NPE beim laden von Daten aus MySQL Java Basics - Anfänger-Themen 9
B Klassen Klasse dynamisch laden. Java Basics - Anfänger-Themen 8
F Daten auf Webserver laden - wiederholen bei Fehler Java Basics - Anfänger-Themen 0
S Serialisierung: Laden von Objekten - Risiken? Java Basics - Anfänger-Themen 4
R Eine Arrayliste in XML abspeichern und laden können Java Basics - Anfänger-Themen 7
J App auf einen Webserver laden Java Basics - Anfänger-Themen 14
S Gespeichertes aus ArrayList laden mithilfe der For-Schleife Java Basics - Anfänger-Themen 12
C Problem beim laden eines BufferedImage Java Basics - Anfänger-Themen 2
C Klassen aus einem Package ermitteln und per Laufzeit laden Java Basics - Anfänger-Themen 17
S LWJGL - Matrix vom Matrixstack laden Java Basics - Anfänger-Themen 3
Seikuassi Objekte in Datei reihenweise speichern/laden Java Basics - Anfänger-Themen 3
W (XML/XSL) Daten aus Eclipse in eine Klasse Laden. Java Basics - Anfänger-Themen 1
F Operatoren Enum aus Textdabei laden Java Basics - Anfänger-Themen 3
B Listener beim Laden (deserialize) wieder hinzufügen bzw. mitspeichern? Java Basics - Anfänger-Themen 3
T Android App: Laden dauert lange Java Basics - Anfänger-Themen 1
I Bild aus Bereich laden Java Basics - Anfänger-Themen 3
S Aus einer Klasse eine andere laden Java Basics - Anfänger-Themen 6
C Daten speichern und laden Java Basics - Anfänger-Themen 6
C Bild ins Frame laden und Objekte drüber legen Java Basics - Anfänger-Themen 1
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
B Bilder laden und drauf zugreifen[Eclipse] Java Basics - Anfänger-Themen 9
M Datei zu DropBox laden Java Basics - Anfänger-Themen 2
M Website im Hintergrund laden Java Basics - Anfänger-Themen 5
M Icon laden und anzeigen Java Basics - Anfänger-Themen 2
L Termin in Array speichern/laden Java Basics - Anfänger-Themen 21
K Transparents Bild laden -> Fehlermeldung Java Basics - Anfänger-Themen 6
T Bild laden Java Basics - Anfänger-Themen 7
S Image in Panel laden Java Basics - Anfänger-Themen 12
L Input/Output Sortieren Speichern Laden von ArrayListe Java Basics - Anfänger-Themen 14
H JButton - Icon(.png) aus resources laden Java Basics - Anfänger-Themen 23
J Laden von Dateien Java Basics - Anfänger-Themen 19
K ImageIcon laden Java Basics - Anfänger-Themen 6
M Problem mit null pinterexception beim laden von Bildern Java Basics - Anfänger-Themen 20
J NullPointerException bei Laden von Bilddatei Java Basics - Anfänger-Themen 16
C Automatisches Ausfuehren einer Funktion beim Laden eines Jar files Java Basics - Anfänger-Themen 3
L Applet: Laden unterbricht den Browserfokus (scrollen) Java Basics - Anfänger-Themen 2
algebraiker Nur Klassen aus einem bestimmten Jar laden Java Basics - Anfänger-Themen 16
B Std-Serialisierung - Speichern/Laden geht nur auf einem Rechner Java Basics - Anfänger-Themen 17
B Applet - Laden eines Java-Fensters bricht ab Java Basics - Anfänger-Themen 6
N Bilddatei laden Java Basics - Anfänger-Themen 42
K BufferedImage, Bilder laden Java Basics - Anfänger-Themen 15
M Webseite komplett laden Java Basics - Anfänger-Themen 4
J Erste Schritte Im Tante-Emma-Laden mehrere Artikel kaufen mit if-Abfrage Java Basics - Anfänger-Themen 24
L Image laden und auf jPanel ausgeben Java Basics - Anfänger-Themen 7
S BMP Bild laden Java Basics - Anfänger-Themen 7
S Input/Output Text und Bilder laden Java Basics - Anfänger-Themen 5
M Beim Start Methode laden die Textfelder füllt Java Basics - Anfänger-Themen 5
D GUI: Panel in Panel laden Java Basics - Anfänger-Themen 10
V Jar-Datei von Byte-Array oder Stream laden? Java Basics - Anfänger-Themen 9
S Klasse bei Laufzeit laden? Java Basics - Anfänger-Themen 2
JAVAnnik problem beim lvl laden Java Basics - Anfänger-Themen 15
J Dateien laden Java Basics - Anfänger-Themen 7
B JFrame neu laden Java Basics - Anfänger-Themen 7
S Problem beim Speichern und Laden von Daten Java Basics - Anfänger-Themen 13
D Bilder Laden, mit Eclipse ok, .jar nicht Java Basics - Anfänger-Themen 5
F Bilder aus .jar datei laden Java Basics - Anfänger-Themen 1
A Daten speichern und wieder in ein Array laden Java Basics - Anfänger-Themen 4
N Applets: Objekte vom Server laden Java Basics - Anfänger-Themen 4
L EOF handle bem Laden leerer Datei Java Basics - Anfänger-Themen 3
N Serialization, Laden klappt nicht wenn die Klasse geändert wurde Java Basics - Anfänger-Themen 3
M Bilder laden und zeichnen Java Basics - Anfänger-Themen 3
B Bildinformation in ein Array laden Java Basics - Anfänger-Themen 14
Luk10 Dateipfad beim Laden einer Datei + Neue kleine Frage! Java Basics - Anfänger-Themen 11
R In jLable Bild aus URL laden Java Basics - Anfänger-Themen 9
K OOP Ressource/Datei mit ClassLoader laden Java Basics - Anfänger-Themen 18
R Image laden die Zweite Java Basics - Anfänger-Themen 4
R Image laden Java Basics - Anfänger-Themen 10
E Keine neuen Beiträge Mit JavaMachine Datei vom Host in den Ram des Host laden. Java Basics - Anfänger-Themen 4
Burny91 Resourcen mit relativen Pfadangaben laden Java Basics - Anfänger-Themen 2
I CSV Datei auf HTML Seite hochladen und in DB laden Java Basics - Anfänger-Themen 9
O Grafik in Frame laden Java Basics - Anfänger-Themen 9
P Speichern und Laden Java Basics - Anfänger-Themen 11
K Bilder "langsam" laden Java Basics - Anfänger-Themen 4
S Serialized LinkedList aus Datei Laden Java Basics - Anfänger-Themen 15
R Welcher Weg um XML von URL zu laden? Java Basics - Anfänger-Themen 3
Ezra StyledDocument speichern und laden Java Basics - Anfänger-Themen 6

Ähnliche Java Themen


Oben