1

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

例子:

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?
  }
}
4

3 回答 3

1

它返回对 A$B 类型的 Object 的引用。

您将能够将其分配给Object参考,例如

Object o = a.vector.get( 0 );

您甚至可以使用反射来研究o.

只是一个一般性的提醒,请使用java.util.ArrayList而不是 Vector。

于 2010-06-25T21:22:47.870 回答
1

它将返回一个 AB 类型的对象但是你不能对它做任何事情,因为你不能将它分配给一个变量或调用它的任何方法。如果你这样做:

System.out.println(a.vector.get(0));

你会得到类似的东西:

A$B@42e816
于 2010-06-25T21:22:50.937 回答
1

你可以试试这段代码:

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

于 2010-06-25T21:23:57.910 回答