Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java &引用;构造函数具有私有访问权限”;错误消息_Java_Maven_Constructor - Fatal编程技术网

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(

我在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
   }
}
我可以在我当前的项目中很好地使用这个类。然而,当我构建、打包并安装到本地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();就是这样-该类以前被命名为其他名称,并且使用了先前的定义。我还以为我在那里疯了一阵子呢!嗯,为什么这是一个答案?