使用反射 API 时出现以下错误
java.lang.IllegalAccessException: Class z.y.x.u.SimpleCompileTest can not access a member of class MyClass with modifiers ""
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:65)
at java.lang.Class.newInstance0(Class.java:351)
at java.lang.Class.newInstance(Class.java:310)
at z.y.x.u.SimpleCompileTest.reflectionCall(SimpleCompileTest.java:44)
at z.y.x.f.RunFunctionality.doPost(RunFunctionality.java:116)
at z.y.x.f.RunFunctionality.doGet(RunFunctionality.java:53)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
Run Code Online (Sandbox Code Playgroud)
这是我的 Psedu 代码
public static void reflectionCall() {
ClassLoader classLoader = SimpleCompileTest.class.getClassLoader();
try{
Class aClass = classLoader.loadClass("MyClass");
Object t = aClass.newInstance();
System.out.println("aClass.getName() = " + aClass.getName());
Method method = aClass.getDeclaredMethod ("myMethod", null);
method.setAccessible(true);
method.invoke(t, null);
.....
}
Run Code Online (Sandbox Code Playgroud)
当发生以下错误时它会抛出错误
Object t = aClass.newInstance();
Run Code Online (Sandbox Code Playgroud)
MyClass.class 文件位于 jar 文件中,在执行 MyClass.java 的内容时动态添加到类路径中
public class MyClass {
public MyClass() {
// TODO Auto-generated constructor stub
}
public void myMethod(){
System.out.println("My Method Called");
}
}
Run Code Online (Sandbox Code Playgroud)
无法弄清楚问题是什么,任何帮助都会更加感激。
异常消息是
\n\njava.lang.IllegalAccessException: Class z.y.x.u.SimpleCompileTest can not access a member of class MyClass with modifiers \xe2\x80\x9c\xe2\x80\x9d\nRun Code Online (Sandbox Code Playgroud)\n\n请注意 . 中缺少修饰符值""。的 javadocClass#newInstance()状态
\n\n\n投掷:
\n\nIllegalAccessException - 如果类或其无效构造函数不可访问。
\n
换句话说,您的MyClass构造函数不可访问。从你的代码来看似乎是这样,但我猜你复制粘贴错了。它很可能缺少修饰符public,即。它具有默认的可访问性。自从那堂课和你的SimpleCompileTest类位于不同的包中,因此构造函数不可见。
| 归档时间: |
|
| 查看次数: |
7002 次 |
| 最近记录: |