簡體   English   中英

java.lang.IllegalAccessException:類 zyxuSimpleCompileTest 無法訪問帶有修飾符“”的類 MyClass 的成員

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

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

這是我的偽代碼

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 狀態

拋出:

IllegalAccessException - 如果類或其空構造函數不可訪問

換句話說,您的MyClass構造函數不可訪問。 從你的代碼來看,它似乎是,但我猜你復制粘貼錯了。 它很可能缺少public修飾符,即。 它具有默認的可訪問性。 由於該類和您的SimpleCompileTest類位於不同的包中,因此構造函數不可見。

Spring Boot 也有類似的問題,消息略有不同,但來自 @sotirios-delimanois 的解決方案有所幫助:

Class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor can not access a 
member of class com.etc.bla.model.entity.BackendBaseEntity with modifiers "public"

BackendBaseEntity類確實具有包可見性,並將其public解決了該錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM