Использование Java secondary not public Class приводит к ошибке «Тип не виден», даже если доступные методы являются общедоступными в основном классе

#java #class #encapsulation #public-fields

#java #класс #инкапсуляция #общедоступные поля

Вопрос:

У меня есть Main.java файл:

 public class Main{

  private EntityDrawer entityDrawer;

  public void setEntityDrawer(EntityDrawer entityDrawer) {
    this.entityDrawer = entityDrawer;
  }

  public EntityDrawer getEntityDrawer() {
    return entityDrawer;
  }
}

class EntityDrawer {

  private Empleado empleado;  

  public Empleado getEmpleado() {
    return empleado;
  }

  public void setEmpleado(Empleado empleado) {
    this.empleado = empleado;
  }

}
  

Если я попытаюсь получить доступ из другого файла, это сработает, если я только попытаюсь получить доступ к EntityManager:

 Main main = new Main();
main.getEntityDrawer(); // NO PROBLEM!
  

Но если я попытаюсь получить доступ к одному из атрибутов (даже если он общедоступен) из EntityManager, это не сработает:

 Main main = new Main();
main.getEntityDrawer().getEmpleado(); // Gives error "The type EntityDrawer is not visible"
  

Я не могу понять, почему это происходит, может кто-нибудь дать мне некоторое представление об этой проблеме?…

Ответ №1:

Я предполагаю, что вы пытаетесь использовать локальный класс пакета EntityDrawer в другом пакете, чего вы не можете сделать.

Попробуйте создать класс public

Комментарии:

1. Действительно, это было так. И все же мне интересно, почему это позволяет мне получить экземпляр объекта, но не его атрибуты…

2. Вы можете назначить его общедоступному интерфейсу, который он реализует, и использовать его общедоступные методы через интерфейс. В вашем случае вы можете назначить его только объекту и использовать такие методы, как getClass() 😉

Ответ №2:

Создайте класс public или переместите вызывающий класс в тот же пакет.

Ответ №3:

Меня тоже раздражала эта проблема, я удалил ненужные файлы jar и добавил только необходимые файлы jar в classpath. Иногда, если вы добавляете избыточные файлы jar в путь к классу, это приводит к конфликту файлов jar, и это показывает ошибку (например, «тип org.apache.lucene.index.DirectoryReader не виден»).

Спасибо.