Hallo,
irgendwie fehlt mir hier der Durchblick, woran es bei mir hapert. Die Klasse sollte eigentlich den Wert aus myF ersetzen und dann ausgeben. Lasse ich das ganze mit dem Debugger laufen, erhalte ich das richtige Ergebnis. Lasse ich die Application ganz normal laufen, bekomme ich Exception aber kein Ergebnis. Vielleicht hat von euch jemand einen Rat für mich?
irgendwie fehlt mir hier der Durchblick, woran es bei mir hapert. Die Klasse sollte eigentlich den Wert aus myF ersetzen und dann ausgeben. Lasse ich das ganze mit dem Debugger laufen, erhalte ich das richtige Ergebnis. Lasse ich die Application ganz normal laufen, bekomme ich Exception aber kein Ergebnis. Vielleicht hat von euch jemand einen Rat für mich?
Code:
package bonin;
import java.lang.reflect.*;
public class Foo {
private String slot;
public String getSlot() {
return slot;
}
public void setSlot(String slot) {
this.slot = slot;
}
Foo(String slot) {
this.slot = slot;
}
public static void main(String[] args) {
Foo myF = new Foo("Just started");
Class myClass = myF.getClass();
System.out.println("Class: " + myClass.getName());
Method[] myMethods = myClass.getDeclaredMethods();
for (int i = 0; i < myMethods.length; i++) {
Method m = myMethods[i];
System.out.println("Method: " + m);
}
try {
Field slot = myClass.getDeclaredField("slot");
slot.setAccessible(true);
try {
Object[] arguments = new Object[] { "Hello World" };
Method m2 = myMethods[2];
slot.set(myF, "mama");
m2.invoke(myF, arguments);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
catch (InvocationTargetException e) {
e.printStackTrace();
}
try {
Method m1 = myMethods[1];
System.out.println("47: " + m1.invoke(myF, null));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchFieldException e1) {
e1.printStackTrace();
}
}
}