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

时间:2012-09-26 15:05:26

标签: java maven constructor

我在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标志强制更新,编译继续失败。可能导致此错误的原因是什么?

4 个答案:

答案 0 :(得分:4)

也许你在classpath中的某个地方有一些其他的ClassA.class文件。检查项目使用的所有无法调用构造函数的jar:其中一个应包含类的旧版本。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

//对于那些使用Kotlin-Java混合项目的人:

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

而不是A a = new A(); //导致上述错误

使用A.INSTANCE。 ......

答案 3 :(得分:-1)

我有这个错误,写“私有”,而不是“构建器”的“公共”;