Java次要非公共类使用产生错误“;“类型不可见”;即使访问的方法在主类中是公共的
我有一个Main.java文件:Java次要非公共类使用产生错误“;“类型不可见”;即使访问的方法在主类中是公共的,java,class,encapsulation,public-fields,Java,Class,Encapsulation,Public Fields,我有一个Main.java文件: public class Main{ private EntityDrawer entityDrawer; public void setEntityDrawer(EntityDrawer entityDrawer) { this.entityDrawer = entityDrawer; } public EntityDrawer getEntityDrawer() { return entityDrawer; } }
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"
我无法理解为什么会发生这种情况,有人能给我一些关于这个问题的见解吗?..我假设您试图在另一个包中使用包本地类
EntityDrawer
,但您不能这样做
尝试将类设置为公共的将类设置为公共的或将调用的类移动到同一个包中。我也对这个问题感到恼火,我删除了不必要的jar文件,只在类路径中添加了所需的jar文件。有时,如果在类路径中放置冗余jar文件,将导致jar文件冲突,这将显示错误(例如“类型org.apache.lucene.index.DirectoryReader不可见”)。
谢谢。的确如此。我仍然想知道为什么它允许我获取对象的实例而不是它的属性……您可以将它分配给它实现的公共接口,并通过该接口使用它的公共方法。在您的原因中,您只能将其分配给对象并使用类似于
getClass()
;)的方法