我有两个类class A
和class B
,当我尝试编译这个程序时,我遇到了编译时错误。
类型A.C1不可见
package com.abc;
public class A {
static class C1 {
}
public static C1 member = new C1();
}
在包B
cde
package com.cde;
import com.abc.A;
public class B {
public static void main(String[] args) {
System.out.println(A.member.hashCode());
System.out.println(((Object)Api.member).hashCode()) //Working fine
}
}
我的查询是为什么编译失败并出现此错误,因为我的类和变量C1是公共的
PS:我不想更改API - 我知道将C1改为公开将解决我的问题
答案 0 :(得分:4)
编译器已经说明了问题。
A.C1类型不可见
您可能需要为内部班级public
C1
package com.abc;
public class A {
public static class C1 {
}
public static C1 member = new C1();
}
答案 1 :(得分:1)
您需要将C1类的范围更改为public。
public class A {
public static class C1 {
}
...
}
C1仅对与A1相同的包中的类可见。因此,对于其他包中的类是可见的,您需要更改范围,或创建公开的公共接口/抽象。并且您的实现将保留在包范围内。
根据doc:
注意:静态嵌套类与其实例成员交互 外部类(和其他类)就像任何其他顶级类一样。 实际上,静态嵌套类在行为上是顶级类 已经嵌套在另一个顶级类中进行打包 便利性。
因此,您的内部类A1.C1的行为与A1类相同,然后是可见性。