【发布时间】:2017-11-04 03:29:41
【问题描述】:
我有两节课。
- 扩展了 B 类的 A 类
- B 类有内部静态最终类,比方说 C
- 这个内部静态类 C 有私有方法 method1。
- D 类扩展 A 类并调用内部 C 类的方法并注入自身。
更详细:
public class D extends A{
public static void main(arg){
C.someMethod(new A(), args)
}
}
public class A extends B{
.....
}
public class B{
public static final class C{
private B fieldB;
private static instance;
private C(B inB, String args){
this.fieldB = inB;
this.fieldB.method1(args) // illegalAccess
}
public static void someMethod(B b, String arg){
if(instanceC== null)
instanceC= new C(b, args)
else {..}
}
private void method1(String arg){}
}
使用该代码,我收到以下错误:
java.lang.IllegalAccessError: 试图访问方法 B.method1(Ljava/lang...)V 来自 A$C 类
我没有任何编译错误,但在运行时出现错误。这里有什么问题?
注意:B 类定义在作为依赖项添加的 jar 文件中。 注意:当我调试时,当它调用 C.someMethod 时,它在框架面板上显示为
someMethod 1253, A$C
不应该像下面这样吗?
someMethod 1253, B$C
【问题讨论】:
-
您的代码无法编译。您收到错误是因为您的 method1() 不接受任何参数,但您正在传递字符串。您还需要在 C 类中定义静态 someMethod(A a,String[] args) 才能运行代码。
-
它是代码的一部分,刚刚编辑过。
标签: java exception inheritance access-modifiers