сообщение об ошибке" конструктор имеет частный доступ"

Я работаю на 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 ответов


может быть, у вас есть другие ClassA.файл класса где-то в пути к классам. Проверьте все банки, используемые проектом, который не может вызвать конструктор: один из них должен содержать старую версию вашего класса.


моя единственная мысль заключается в том, что у вас есть проблема с вашим пакетом. Не забудьте определить пакет в верхней части исходного файла для classA с помощью ключевого слова package. При вызове убедитесь, что файл находится в списке include с ключевым словом include. Вы можете столкнуться с ошибкой, потому что ClassA существует в некотором пакете по умолчанию, и это то, что вы на самом деле вызываете вместо вызова локально созданного класса ClassA. Код, который вы опубликовали, выглядит нормально, и вы уже дважды проверили чтобы изменения вступили в силу в вашем репозитории.


//для тех, кто имеет смешанные проекты Kotlin-Java:

Если указанный файл (с конструктором) находится в Kotlin и используется в Java:

вместо a = new A (); //что вызывает указанную ошибку

используйте A. экземпляр. ...


У меня есть эта ошибка, где пишут "private", а не" public " для конструктора класса;