6

我正在使用 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

我已经在我的本地 repo 中反编译了 .jar 以确保构造函数存在并且是公共的 - 它是。我还使用了 -U 标志来强制更新并且编译继续失败。什么可能导致此错误?

4

4 回答 4

4

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

于 2012-09-26T15:15:21.140 回答
2

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

于 2012-09-26T15:13:10.427 回答
0

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

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

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

使用 A.INSTANCE。…

于 2018-06-15T02:05:40.000 回答
-1

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

于 2014-02-26T09:59:59.950 回答