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; } }

我有一个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"

我无法理解为什么会发生这种情况,有人能给我一些关于这个问题的见解吗?..

我假设您试图在另一个包中使用包本地类
EntityDrawer
,但您不能这样做


尝试将类设置为公共的

将类设置为公共的或将调用的类移动到同一个包中。

我也对这个问题感到恼火,我删除了不必要的jar文件,只在类路径中添加了所需的jar文件。有时,如果在类路径中放置冗余jar文件,将导致jar文件冲突,这将显示错误(例如“类型org.apache.lucene.index.DirectoryReader不可见”)。


谢谢。

的确如此。我仍然想知道为什么它允许我获取对象的实例而不是它的属性……您可以将它分配给它实现的公共接口,并通过该接口使用它的公共方法。在您的原因中,您只能将其分配给对象并使用类似于
getClass()
;)的方法