TypeCasting

Basti4231

Bekanntes Mitglied
Hallo Leute,

ich erzeuge ein neues Class object über Reflection. Mein Ziel ist es, dieses neue Class object in einen bestimmten Typen eines Interfaces zu casten. Ich schaffe es aber nicht, habe schon viel probiert aber mein Verständnis reicht nicht aus.

Ich habe ein kleines Beispiel gemacht. Es gibt zwei Klassen ("A" und "B"), die beide das Interface Writable implementieren. Zur Laufzeit hole ich mir eine der beiden Klassen über Reflection und dann soll erst überprüft werden, ob diese das Interface Writable implementiert und wenn ja auch als Objekt des Typs meines Interfaces Writable zurückgegeben werden.

Hier mein Codeschnipsel:

Java:
private Writable go(String className) {
		try {
			Class<?> c = Class.forName(className);
		// now check if it is an Writable implementing class.
        if (implementsWritable(c)){
           // Return the class of type Writable
           ...				
			}

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}
/**
* Returns true, if the class object implements the interface, false if it doesn´t.
*/
private boolean implementsWritable(Class<?> c) {
		for (Class<?> i : c.getInterfaces()) {
			if (Writable.class.equals(i))
				return true;
		}
		return false;
	}

Vielen Dank schonmal für Eure Hilfe!

Gruß Basti
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Der Kommentar (// Return the class of type Writable) ist genau so unverständlich für mich wie deine Beschreibung.
Du willst doch sicherlich ein Objekt/Instanz dieser Klasse zurückgeben oder nicht. Du übergibst der Methode zunächst erst einmal nur einen String, du musst also erst einmal von der Klasse (c) eine Instanz erzeugen. Diese kannst du dann auf Writable casten.

Beispiel:
Java:
			if (implementsWritable(c)) {
				return (Writable) c.newInstance();
			}
oder wenn du keinen parameterlosen Konstruktor hast auch mit Constructor.
 

Neue Themen


Oben