Vector中的私有类公开使用

时间:2010-06-25 21:14:43

标签: java vector private public

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

3 个答案:

答案 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