Java中,使用非public的次要类会产生错误"Type is not Visible",即使在主类中访问的方法是public的。

9

我有一个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访问其中一个属性(即使是public),它也无法正常工作:

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

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

3个回答

15

我猜您正在尝试在另一个包中使用一个包本地的类 EntityDrawer,这是不允许的。

请尝试将该类声明为 public


确实,情况就是这样。但我还是想知道为什么它允许我获取对象的实例而不是它的属性... - will824
1
你可以将它分配给一个公共接口并通过接口使用其公共方法。在你的情况下,你只能将它分配给Object并使用像getClass()这样的方法 ;) - Peter Lawrey

6
使类public或将调用类移动到相同的包中。

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

谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接