在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?
}
}
答案 0 :(得分:1)
它返回对A $ B类型的Object的引用。
您可以将其分配给Object
引用,例如
Object o = a.vector.get( 0 );
您甚至可以使用反射来调查o
的属性。
只是一般提醒,请使用java.util.ArrayList
代替Vector。
答案 1 :(得分:1)
它将返回一个A.B类型的对象但是你无法对它做任何事情,因为你无法将它分配给变量或调用它上面的任何方法。如果你这样做:
System.out.println(a.vector.get(0));
你会得到类似的东西:
A$B@42e816
答案 2 :(得分: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
。