在Java中,当您从类外部引用Vector中的私有类时会发生什么?

例:

public class A {
  private class B {}
  public Vector<B> vector = new Vector<B>();

  public A() {
    vector.add(new B());
  }
}

public class C {
  public C() {
    A a = new A();
    a.vector.get(0); // <- What does this return?
  }
}

最佳答案

您可以尝试以下代码:

public static void main(String[] args) {
    A a = new A();
    Object o = a.vector.get(0); // <- What does this return?
    System.out.println(o.getClass());
}


该类是A $ B,因此它知道B是A的内部类。

但是您不能访问B的任何成员。例如,如果将类A更改为此:

public class A {
  private class B {
      public int x;
  }
  public Vector<B> vector = new Vector<B>();

  public A() {
    vector.add(new B());
    vector.get(0).x = 10;
  }
}


您仍然无法执行此操作:

public static void main(String[] args) {
    A a = new A();
    System.out.println(a.vector.get(0).x); // this won't compile
}


它会说the type A.B is not visible

关于java - 公开使用的Vector中的私有(private)类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3121506/

10-17 02:37