我在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标志强制更新,编译继续失败。可能导致此错误的原因是什么?
答案 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)
我有这个错误,写“私有”,而不是“构建器”的“公共”;