сообщение об ошибке" конструктор имеет частный доступ"
Я работаю на 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. экземпляр. ...