#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 не виден»).
Спасибо.