Java &引用;构造函数具有私有访问权限”;错误消息
我在Java工作,遇到了一个非常奇怪的错误。我有一个非常基本的课程,如下所示:Java &引用;构造函数具有私有访问权限”;错误消息,java,maven,constructor,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(
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
}
}
我可以在我当前的项目中很好地使用这个类。然而,当我构建、打包并安装到本地repo(使用Maven,没有远程工件repo设置)时,其他项目无法正确使用该类,因为它们无法实例化它。当我尝试以下任何方式时:
ClassA classA = new ClassA();
我发现以下编译错误:
ClassA() has private access in [package].ClassA
我已经在我的本地repo中反编译了.jar,以确保构造函数存在并且是公共的——确实如此。我还使用了-U标志强制更新,但编译仍然失败。是什么导致了这个错误?我唯一的想法是您的软件包有问题。确保使用package关键字在classA的源文件顶部定义包。调用时,请确保该文件位于包含关键字的包含列表中。您可能会遇到错误,因为ClassA存在于某个默认包中,而这正是您实际调用的,而不是调用本地生成的ClassA类。您发布的代码看起来很好,并且您已经仔细检查以确保更改在存储库中生效。可能在类路径中的某个位置有其他ClassA.class文件。检查项目使用的所有无法调用构造函数的jar:其中一个jar应该包含类的旧版本。我有这个错误,在这里为类构造函数写“private”,而不是“public” //对于那些使用Kotlin Java混合项目的人: 如果所述文件(带构造函数)在Kotlin中,并且正在Java中使用: 而不是A=新A()//这导致了上述错误
使用一个实例 包定义是什么?你能发布类的
javap
输出吗?ClassA和它的调用类(我们会说ClassB)在同一级别的两个不同包中-因此在你的类文件中实际上是“Public”(大写“p”)的my.package.one.ClassA和my.package.two.ClassB,还是复制粘贴的产物?这两个答案似乎都很好。我建议你把ClassA改成另一个名字,看看会发生什么。可能冲突掩盖了您的问题并避免了冲突,这一点变得很明显。我只是检查以验证,并在尝试实例化它时显式导入了我的.package.one.ClassA。为了完整性,请更改ClassA ClassA=new ClassA();to ClassA ClassA=my.package.one.ClassA();就是这样-该类以前被命名为其他名称,并且使用了先前的定义。我还以为我在那里疯了一阵子呢!嗯,为什么这是一个答案?