java.lang.IllegalAccessException : Class z. y.x.u.SimpleCompileTest 无法使用修饰符 ""访问类 MyClass 的成员

标签 java reflection

使用反射 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)

这是我的 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);
.....
}

发生以下错误时抛出错误

Object t = aClass.newInstance();

MyClass.class 文件位于 jar 文件中,在执行 MyClass.java 的内容时动态添加到类路径中

public class MyClass {

    public MyClass() {
        // TODO Auto-generated constructor stub
    }

    public void myMethod(){
        System.out.println("My Method Called");
    }

}

无法弄清楚问题是什么,更感谢您的帮助。

最佳答案

异常消息是

java.lang.IllegalAccessException: Class z.y.x.u.SimpleCompileTest can not access a member of class MyClass with modifiers “”

请注意 "" 中缺少修饰符值。 Class#newInstance() 的 javadoc 声明

Throws:

IllegalAccessException - if the class or its nullary constructor is not accessible.

换句话说,您的 MyClass 构造函数不可访问。从你的代码来看似乎是这样,但我猜你复制粘贴错了。它很可能缺少 public 修饰符,即。它具有默认的可访问性。由于该类和您的 SimpleCompileTest 类位于不同的包中,因此构造函数不可见。

关于java.lang.IllegalAccessException : Class z. y.x.u.SimpleCompileTest 无法使用修饰符 ""访问类 MyClass 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22105307/

相关文章:

c# - 从抽象类反射(reflect)实现的私有(private)方法?

c# - 将属性放在方法的特定参数上有什么用处?

c# - 如何使用反射调用泛型类的静态属性?

java - 尽管优先级设置为最高,但在 Android 4.4 及更高版本上消息不会被阻止。有解决方法吗?

java - java中是否可以将父类设为Generic?

java - 如何为图像添加聚光灯

java - 如何在 guice 提供程序中使用 guice 注入(inject)器?

java - 我如何添加一个数组中的一个数组? & Android 获取请求

java - 如何使用反射在运行时更改注释值?

Java 相当于 javascript 中的返回函数