Object auf Interface casten? Geht das?

Status
Nicht offen für weitere Antworten.
M

-MasO-

Gast
Hallo zusammen,

ich habe folgendes Problem:

ich habe eine methode
Code:
public static Object getInterface( String interfaceName ){

vorgegeben. Diese Methode funktioniert auch schon einwandfrei und gibt mir, wie schon oben angeführt ein Object zurück. Nun ist es meine Aufgabe, eine Methode

Code:
public static MyInterface getMyInterface(){

zu schreiben. Diese Methode soll die obrige benutzen und als String "MyInterface" (also den Interface Namen als String) mitgeben.

Das Problem dabei ist dass ich von Object nicht auf ein Interface casten kann, sonst bekomm ich eine ClassCastException.
Versuche ich nun folgendes:

Code:
MyClass c = (MyClass) getInterface( "MyInterface" );

bekomme ich die Exception ebenfalls. (MyClass implementiert MyInterface)

Die Interfaces werden in eine Map gespeichert, Key dabei ist der String (also Name), Wert das Interface selbst.

Meine Frage nun ist:
Wie kann ich das Problem ohne die ClassCastException lösen? Oder ist überhaupt eine Lösung auf dem Weg möglich?

Danke im Voraus für Antworten

MfG
 

byte

Top Contributor
generell geht das schon. folgendes beispiel:

Code:
Object o = new ArrayList();
List l = (List)o;

list ist in diesem fall das interface. wie du siehst ist es möglich, da das object eigentlich eine arraylist ist und diese das interface list implementiert. wenn dein object jedoch gar nix mit dem interface zu tun hat (bzgl. vererbungshierarchie/ implementierung), dann kannst du natürlich auch nicht casten und es gibt ne classcastexception.
 
M

-MasO-

Gast
Hm... ja... am besten poste ich mal die methoden ;)

Code:
public static Object getInterface(String interfaceName){
	if( loadedInterfaces.containsKey( interfaceName ) ){
		System.out.println( loadedInterfaces.get(  interfaceName ).toString() ); //zur Überprüfung
		return loadedInterfaces.get( interfaceName );
	}
	else if( !loadedInterfaces.containsKey( interfaceName ) ){
			
		try{
			Class c = Class.forName( interfaceName );
			System.out.println( c.toString() ); // "interface MyInterface"
			loadedInterfaces.put( interfaceName, c );
		}
		catch( ClassNotFoundException e ){
		}
			
		return loadedInterfaces.get( interfaceName );
	}
		
	return null;
		
}

loadedInterfaces ist die Map, in der als Key der Interface-Name als String und als Value das Interface selbst gespeichert wird.

Mir gehts jetzt darum, wie dann die getMyInterface Methode ausschauen soll...

MfG
 
S

stev.glasow

Gast
In der Map hälst du doch nur die Klassen namen, also entweder
public static Class getInterface(String interfaceName){

oder
public static String getInterface(String interfaceName){
[edit]
zweiteres ist blödsin
 
M

-MasO-

Gast
Ouch... *selbsteineamdeckelverpass*

Danke mal hierzu...

Nur wie schreib ich dann die Methode so, dass auch eine Methode getMyInterface2 geschrieben werden kann? (Also sprich dass es mit mehreren Interfaces so funktioniert?)

MfG
 
M

-MasO-

Gast
stevg hat gesagt.:
In der Map hälst du doch nur die Klassen namen, also entweder
public static Class getInterface(String interfaceName){

oder
public static String getInterface(String interfaceName){

in der Map schauts folgendermaßen aus (Debugger sei dank)
Code:
- Key: "MyInterface"
- Value: "interface MyInterface"
wie gesagt, die gepostete Methode funktioniert einwandfrei, ich habe alle möglichen Sachen getestet und ausgegeben... und da haben die Werte alle so gestimmt... oder hab ich dich grad falsch verstanden?

MfG
 
B

bygones

Gast
großer Faux Pas

Code:
      catch( ClassNotFoundException e ){
      }
du fängst ab, gibst dir aber nicht die Fehlermeldung aus :wink:
schreib mal e.printStackTrace() rein - dann bekommst du schonmal mehr infos....

du musst noch eine Instanz des Interfaces erstellen (so, nach wenig schlaf jetzt ohne gewähr):

d.h. da du kein Interface initiieren kannst musst du eine implementierende Klasse des Interfaces nehmen. dann steht in der Map der Name des Interfaces als Key und eine Instanz einer implementierenden Klasse als Value. Diesen kannst du natürlich später als Interface behandeln.... wobei das ganze nach deiner bisherigen Methode nichtgeht, da du ja das Interface und eine implem. Klasse brauchst.... nur mit der Bezeichnung des Interfaces kommst du nicht weit.

grml - was richtig ? sach mal einer ^^
 
M

-MasO-

Gast
deathbyaclown hat gesagt.:
großer Faux Pas

Code:
      catch( ClassNotFoundException e ){
      }
du fängst ab, gibst dir aber nicht die Fehlermeldung aus :wink:
schreib mal e.printStackTrace() rein - dann bekommst du schonmal mehr infos....

hab ich nur mal so leer hingeschrieben, dass der Compiler aufhört zu weinen ;)

nach hinzufügen passiert weiter nichts, weil die Klasse ja existiert ;)

Danke trotzdem für den Hinweis :D

MfG
 
S

stev.glasow

Gast
Weiß gar nicht wo jetzt dein Problem liegt.
Immer noch ""MyClass c = (MyClass) getInterface( "MyInterface" );"" ?

Wenn du eine Instanz von MyClass zurück geben willst kann du das über Reflection machen aber da du anscheint nur Interface s in der Maps hällst und man die nicht instanzieren kann, geht das nicht
 
M

-MasO-

Gast
Oke... ich denke ich hab das Problem verstanden...

In meine Map müssten statt den Interfaces selbst Klassen, welche diese Interfaces implementieren, benutzen... Nur wie finde ich den Klassennamen der implementierenden Klasse heraus? Oder muss der interfaceName String geändert werden auf "MyClass" ?

MfG
 
M

-MasO-

Gast
Und kannst du mir diese Reflection bitte auch kurz erklären? Hab bis jetzt nur 1 Jahr Schul-Java hinter mir... :(

MfG
 
S

stev.glasow

Gast
Ne, aber wenn der Konstruktor keine Übergabeparameter bekommt, kannst einfach: Object obj = c.newInstance(); machen
 
M

-MasO-

Gast
Seems like it works...

Dickes Danke an alle, die mir dabei geholfen haben, danke an stevg für den finalen Denkanstoß...

Falls es irgendwann mal wieder Probleme gibt, weiß ich nun wo ich eine funktionierende Java-Community finde :D

*anmelde-knopf-such*

MfG
 

-MasO-

Mitglied
btw... die methode sieht nun folgendermaßen aus:

Code:
public static Object getInterface(String interfaceName){
	if( loadedInterfaces.containsKey( interfaceName ) ){
		return loadedInterfaces.get( interfaceName );
	}
	else if( !loadedInterfaces.containsKey( interfaceName ) ){
		
		try{
			Class c = Class.forName( interfaceName );
						
			Object object = c.newInstance();
			
			loadedInterfaces.put( interfaceName, object );
			
		}
		catch( ClassNotFoundException e ){
			e.printStackTrace();
		}
		catch( InstantiationException e ){
			e.printStackTrace();
		}
		catch( IllegalAccessException e ){
			e.printStackTrace();
		}
		
		return loadedInterfaces.get( interfaceName );
	}
	
	return null;
	
}
nochmal zur erklärung:
loadedInterfaces ist eine Map (genauer eine HashMap)... Der Key ist immer der Name von der Klasse, die das Interface implementiert*, der Wert eine Instanz von einer Klasse, die das Interface implementiert...

MfG

*hier wurde editiert
 
B

bygones

Gast
nach der implementation nicht ganz...

du musst ja eine implementierende Klasse als Parameter übergeben, um dann eine Instanz erzeugen zu können, ergo ist in der Map der Name der implementierenden Klasse als Key gespeichert und eine Instanz dieser Klasse als Value.

Würdest du später die Methode mit dem Interface und nicht mit dem Namen der implem. Klasse aufrufen, hauts dir wieder alles um die Ohren !
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Object als Parameter das Unbekannt ist, aber ein bestimmtes Interface haben muss Java Basics - Anfänger-Themen 3
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
H What is the Life Cycle of an Object Created Within/Outside of a Servlet? Will that item be destroyed after the session ends? Java Basics - Anfänger-Themen 1
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
thobren Object[][] Java Basics - Anfänger-Themen 8
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
N extends und super vs new object Java Basics - Anfänger-Themen 4
I JaxB und Klasse "Object" ? Java Basics - Anfänger-Themen 7
D Klassen undefined for the type 'object' Java Basics - Anfänger-Themen 2
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
M Java Klasse Object Java Basics - Anfänger-Themen 5
G Java Object value und entity? Java Basics - Anfänger-Themen 2
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Zugreifen auf Object[] Java Basics - Anfänger-Themen 4
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
A Object to Map Java Basics - Anfänger-Themen 2
D Object in ArrayList ausgeben Java Basics - Anfänger-Themen 24
L Input/Output Datei Object aus resources Java Basics - Anfänger-Themen 1
T HashSet in List-Object Java Basics - Anfänger-Themen 5
H Datentypen for(typ a : b) nur typ Object möglich ? Java Basics - Anfänger-Themen 2
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
T Object zu Char zu String Java Basics - Anfänger-Themen 6
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
F Methoden Object.clone() Java Basics - Anfänger-Themen 1
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
A JavaScript Object Notation einbinden mittels Maven Java Basics - Anfänger-Themen 7
F Unique Object Java Basics - Anfänger-Themen 3
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
R The method printf(String, Object[]) in the type printStrem in not applicable for the arguments ... Java Basics - Anfänger-Themen 3
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
O Object Java Basics - Anfänger-Themen 4
O nullpointerExce. Gui Object weitergabe Java Basics - Anfänger-Themen 12
P Variablen generic type variablen in object array Java Basics - Anfänger-Themen 1
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
J Object bestimmter Klasse Java Basics - Anfänger-Themen 3
F Object mit zwei Entities Java Basics - Anfänger-Themen 3
B Map, basic types & Object Java Basics - Anfänger-Themen 5
P Auf Object in Array Methode anwanden Java Basics - Anfänger-Themen 2
S Object Array Length via Konstruktor Java Basics - Anfänger-Themen 5
B Date Object mit Millisekunden Ausgabe Java Basics - Anfänger-Themen 8
V Object in double? Java Basics - Anfänger-Themen 3
B Object in Array nach Prüfung löschen Java Basics - Anfänger-Themen 13
N Object mit String ansprechen Java Basics - Anfänger-Themen 7
A Applet mit Object-Tags einbinden. Java Basics - Anfänger-Themen 3
A If object != null funktioniert nicht Java Basics - Anfänger-Themen 2
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
M Object people[][] Daten hinzufügen Java Basics - Anfänger-Themen 3
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
T Object[][] to String[][] Java Basics - Anfänger-Themen 8
T Object in Array Java Basics - Anfänger-Themen 3
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
H Object an methode Java Basics - Anfänger-Themen 4
D Object -> String Java Basics - Anfänger-Themen 6
W Compiler-Fehler "Could not reserve enough space for object heap"... und dann raucht das Programm ab Java Basics - Anfänger-Themen 3
D Datentyp Object Java Basics - Anfänger-Themen 2
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
L Datentypen Object zu double zu int konvertieren Java Basics - Anfänger-Themen 6
M String to Object Java Basics - Anfänger-Themen 15
S Object Initialisierung Java Basics - Anfänger-Themen 7
H Object in einem .jar-File einlesen Java Basics - Anfänger-Themen 3
D Object oder Primitiv Java Basics - Anfänger-Themen 10
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
W Main-method in Object-classes Java Basics - Anfänger-Themen 5
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
E Equals-Methode auf Class-Object Java Basics - Anfänger-Themen 17
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
B Methoden object = this; Java Basics - Anfänger-Themen 4
S Object Member<T> Klasse Java Basics - Anfänger-Themen 5
M Methode von einem Object überschreiben Java Basics - Anfänger-Themen 5
S Collections Aus Set<Object> bestimmte Typen entfernen Java Basics - Anfänger-Themen 3
M Variablen dynamisch variableninhalt von Object auslesen Java Basics - Anfänger-Themen 4
M Fehlermeldung: the method.... ist undefined for the type object Java Basics - Anfänger-Themen 6
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
C Bereits geöffnetes Object ermitteln Java Basics - Anfänger-Themen 5
N HashMap<String, Object> bei jre4 Java Basics - Anfänger-Themen 3
M object cast auf double Java Basics - Anfänger-Themen 2
K Datentypen Object in 2-dimensionales String Array zurückwandeln Java Basics - Anfänger-Themen 14
D Aus Object auslesen Java Basics - Anfänger-Themen 2
P Java Object das eine HTML Datei repräsentiert Java Basics - Anfänger-Themen 19
C mehrdimensionales Object sortieren Java Basics - Anfänger-Themen 4
T Aus object Array Double Werte ziehen Java Basics - Anfänger-Themen 10
T List.add(Object) führt zu NullPointerException Java Basics - Anfänger-Themen 14
F Wie kann ein Object[] zu Integer[] umwandeln? Java Basics - Anfänger-Themen 6
O Serialisierung: Object abspeichern und aufrufen Java Basics - Anfänger-Themen 6
D Object auf JTextpane / jTextArea casten? Java Basics - Anfänger-Themen 3
Ollek Collections ArrayList Object - Attribut von dem Object vergleichen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben