Hallo,
ich habe ein kleines Problem mit der Reflection API und weiß leider nicht so richtig wo dort das Problem ist.
Ich erzeuge eine Instanz von einem Interface, welches die public-Methode "showSomething(String s)" hat. Diese Instanz reiche in in eine andere Klasse wo via Reflection diese Methode ausgelöst werden soll.
Solange die 3 unten stehenden Klassen im gleichen Package sind funktioniert auch alles wunderbar. Jedoch wenn ich sie ein wenig verteilen will (also in unterschiedliche packages) kommt es zu einem Fehler und ich weiß leider nicht so genau warum.
Habt ihr da eine Idee?
und erhalte folgende Fehlermeldung:
java.lang.IllegalAccessException: Class demo.util.ReflectionClass can not access a member of class demo.blub.Starter$1 with modifiers "public"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at demo.util.ReflectionClass.<init>(ReflectionClass.java:28)
at demo.blub.Starter.<init>(Starter.java:24)
at demo.blub.Starter.main(Starter.java:28)
ich habe ein kleines Problem mit der Reflection API und weiß leider nicht so richtig wo dort das Problem ist.
Ich erzeuge eine Instanz von einem Interface, welches die public-Methode "showSomething(String s)" hat. Diese Instanz reiche in in eine andere Klasse wo via Reflection diese Methode ausgelöst werden soll.
Solange die 3 unten stehenden Klassen im gleichen Package sind funktioniert auch alles wunderbar. Jedoch wenn ich sie ein wenig verteilen will (also in unterschiedliche packages) kommt es zu einem Fehler und ich weiß leider nicht so genau warum.
Habt ihr da eine Idee?
Java:
package demo.blub;
public interface ITest {
void showSomething(String s);
}
Java:
package demo.blub;
import demo.util.ReflectionClass;
public class Starter {
public Starter() {
ITest tester = new ITest() {
@Override
public void showSomething(String s) {
System.out.println(s);
}
};
ReflectionClass reflection = new ReflectionClass(tester);
}
public static void main(String[] args) {
new Starter();
}
}
Java:
package demo.util;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import demo.blub.ITest;
public class ReflectionClass {
private ITest tester;
public ReflectionClass(ITest tester) {
Class c = String.class;
Method targetMethod;
try {
targetMethod = tester.getClass().getMethod("showSomething", c);
targetMethod.invoke(tester, new Object[]{"Hier wird etwas tolles gezeigt!!!!"});
} catch (SecurityException e) {e.printStackTrace();
} catch (NoSuchMethodException e) {e.printStackTrace();
} catch (IllegalArgumentException e) {e.printStackTrace();
} catch (IllegalAccessException e) {e.printStackTrace();
} catch (InvocationTargetException e) {e.printStackTrace();}
}
}
und erhalte folgende Fehlermeldung:
java.lang.IllegalAccessException: Class demo.util.ReflectionClass can not access a member of class demo.blub.Starter$1 with modifiers "public"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at demo.util.ReflectionClass.<init>(ReflectionClass.java:28)
at demo.blub.Starter.<init>(Starter.java:24)
at demo.blub.Starter.main(Starter.java:28)