FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

Java casting problem.

Java casting problem. 2007-08-14 09:54
Anonymer User
merkwürdiges Java-Verhalten:

JLabel label = new JLabel();
label.setText("hallo");
Object o = label;
System.out.println(label.getClass().cast(o).getText()); // es geht

JLabel label = new JLabel();
label.setText("hallo");
Class clazz = label.getClass();
Object o = label;
System.out.println(clazz.cast(o).getText()); // geht nicht

hat jemand Idee, wieso geht das zweite nicht?…

RE: Java casting problem. 2007-08-14 10:09
T
'geht nicht' ist ja mal ne mäßig konkrete fehlermeldung

RE: Java casting problem. 2007-08-14 10:56
Anonymer User
Eclipse meldet, dass die Methode getText() für klass Object nicht definiert.

RE: Java casting problem. 2007-08-14 11:27
korelstar
Die Java-Klasse "Class" verwendet Generics. Wenn du keinen Typ angibst, wird daher der Typ Object verwendet. Daher liefert dir clazz.cast(o) ein Objekt vom Typ Object, welches natürlich nicht die Methode getText() besitzt.

Folgendes funktioniert hingegen:
JLabel label = new JLabel(); label.setText("hallo2"); Class<? extends JLabel> clazz = label.getClass(); Object o = label; System.out.println(clazz.cast(o).getText());

RE: Java casting problem. 2007-08-14 11:45
Anonymer User
Danke für die Antwort! Das Problem ist: ich will die Methode getText() aufrufen überhaupt ohne zu wissen, was für ein Object ist es. Vorausgesetzt - getText() ist da definiert. Im ersten Beispiel geht es. Im letzten muss ich vorher durch "instance of" ermitteln ob es "JLabel" oder was anderes ist. Wie kann ich "instance of" ersparen?

RE: Java casting problem. 2007-08-14 12:09
Anonymer User
JLabel label = new JLabel(); label.setText("hallo"); Class clazz = null; Method method = null; String text = ""; try { clazz = Class.forName(label.getClass().getCanonicalName()); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { method = clazz.getMethod("getText", null); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { text = (String) method.invoke(label, null); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(text);
So geht es…

RE: Java casting problem. 2007-08-14 12:58
Slater
http://www.java-forum.org/de/topic54217_casting-problem.html

RE: Java casting problem. 2007-08-14 21:27
f0k
http://www.java-forum.org/de/topic54217_casting-problem.html
Ha! Endlich wissen wir also, wer sich andauernd hinter dem Pseudonym "Anonymer User" verbirgt! [28]

RE: Java casting problem. 2007-08-15 08:27
Anonymer User
:-)