Java 公开使用的向量中的私有类
在Java中,当您从类外部引用Java 公开使用的向量中的私有类,java,vector,private,public,Java,Vector,Private,Public,在Java中,当您从类外部引用向量中的私有类时会发生什么 例如: 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); //
向量中的私有类时会发生什么
例如:
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?
}
}
公共A类{
私有类B{}
公共向量=新向量();
公共A(){
添加(新的B());
}
}
公共C类{
公共C(){
A=新的A();
a、 get(0);//它返回对类型为a$B的对象的引用
您可以将其分配给对象
引用,例如
Object o = a.vector.get( 0 );
您甚至可以使用反射来研究o
的属性
请注意,请使用java.util.ArrayList
而不是Vector。它将返回一个类型为a.B的对象,但实际上您无法对其执行任何操作,因为您将无法将其分配给变量或对其调用任何方法。如果您执行以下操作:
System.out.println(a.vector.get(0));
您将得到如下结果:
A$B@42e816
您可以尝试以下代码:
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());
}
如果添加toString()方法,它会说类型A.B不可见,它会很好地打印出toString()返回的任何内容直接编译它会失败。所有这些向量示例从何而来?是否有一些学习材料在那里鼓吹向量而不是ArrayList?你是在问我吗?这个示例是我突然想到的。我从来不知道ArrayList比Vector快。我在Javadoc中找不到任何东西。我一直使用V由于我的C++/STL背景,所以使用Vector。通常,人们使用ArrayList而不是Vector。有些情况下,出于线程安全的目的,人们使用Vector,例如Vector几乎是一个过时的类。除非您需要它提供的特定类型的线程安全,否则使用ArrayList。它的速度要快得多。
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
}