Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 公开使用的向量中的私有类_Java_Vector_Private_Public - Fatal编程技术网

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); //

在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); // <- 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
}