Java 访问修饰符错误-尽管类是公共的
我有两个类Java 访问修饰符错误-尽管类是公共的,java,Java,我有两个类class A和class B,当我试图编译这个程序时,我遇到了以下编译时错误 类型A.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)A
class A
和class B
,当我试图编译这个程序时,我遇到了以下编译时错误
类型A.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更改为public将解决我的问题编译器已经说明了这个问题 类型A.C1不可见 您可能需要为内部类添加
public
package com.abc;
public class A {
public static class C1 {
}
public static C1 member = new C1();
}
您需要将类C1的作用域更改为public
public class A {
public static class C1 {
}
...
}
C1仅对与A1相同包中的类可见。因此,为了使其他包中的类可见,您需要更改作用域,或者创建一个公共接口/抽象。您的实现将保留在包范围内
根据报告:
注意:静态嵌套类与它的实例成员交互
外部类(和其他类)与任何其他顶级类一样。
实际上,静态嵌套类在行为上是顶级类
已嵌套在另一个顶级类中进行打包
方便
因此,您的内部类A1.C1的行为与类A1相同,然后就可见性而言。请-检查JSL中的公共访问修饰符。@LoneWolf自己检查。这个答案是正确的。你的观点?@EJP-请检查我的答案,这是我为你的类
C1
所做的不是公开的。在Eclipse中尝试了相同的代码,通过将静态类C1
声明为public
解决了问题。@EJP-你为什么要我更改API。我已经编辑了问题并发布了答案,请分享你的答案inputs@LoneWolf我没有说过任何关于更改API的内容。我只是指出你问题中的错误。C1不是公共的,这就是错误消息所说的,您要么将其公开,要么调整代码中的其他内容。
public class A {
public static class C1 {
}
...
}