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 {
    }
   ...
}