“构造函数具有私有访问权限”错误消息

问题描述 投票:0回答:5

我正在使用 Java 工作,遇到了一个非常奇怪的错误。 我有一个非常基础的课程,如下:

public class ClassA{
   private static Logger log = Logger.getLogger(ClassA.class.getName());
   private boolean trace;

   public ClassA(){
      trace = log.isTraceEnabled();
   }

   public void doSomething(){
      //does stuff
   }
}

我可以在我当前的项目中很好地使用这个类。 但是,当我构建、打包并安装到本地存储库(使用 Maven,未设置远程工件存储库)时,其他项目无法正确使用此类,因为它们无法实例化它。 当我尝试类似的事情时:

ClassA classA = new ClassA();

我收到以下编译错误:

ClassA() has private access in [package].ClassA

我已经在本地存储库中反编译了 .jar,以确保构造函数存在并且是公开的 - 确实如此。 我还使用 -U 标志强制更新,但编译仍然失败。 什么可能导致此错误?

java maven constructor
5个回答
4
投票

也许类路径中的某个位置还有其他 ClassA.class 文件。 检查项目使用的所有无法调用构造函数的 jar:其中一个应该包含您的类的旧版本。


2
投票

我唯一的想法是您的包裹有问题。确保使用 package 关键字在 classA 的源文件顶部定义包。当您调用它时,请确保该文件位于包含关键字的包含列表中。您可能会遇到错误,因为 ClassA 存在于某个默认包中,而这正是您实际调用的内容,而不是调用本地创建的 ClassA 类。您发布的代码看起来不错,并且您已经仔细检查以确保更改已在您的存储库中生效。


2
投票

//对于那些拥有 Kotlin-Java 混合项目的人:

如果所述文件(带有构造函数)位于 Kotlin 中并且正在 Java 中使用:

代替 A a = new A(); //这会导致上述错误

使用A.INSTANCE。 …


0
投票

我遇到此错误,桌面不是“类”。当桌面是“枚举”时,我遇到此错误。用Intellij生成类时出现了非常奇怪的错误。当然,在自动生成类时,我单击了枚举标签而不是类

用Intellij生成类时出现了非常奇怪的错误。当然,在自动生成类时,我单击了枚举标签而不是类 [![在此处输入图像描述][1]][1]

这很愚蠢,但就是这样,它可能发生在任何人身上

此外,Intellij 提供了按第一顺序创建枚举,因此如果您习惯按 Enter 按钮,则会直接陷入错误 [1]:https://i.sstatic.net/pzb6bBfg.png


-1
投票

我有这个错误,在类构造函数中写“private”,而不是“public”;

© www.soinside.com 2019 - 2024. All rights reserved.