0

我创建了几个自定义类的对象并为它们分配了不同的属性。然后我将这些对象中的每一个添加到一个向量中,但是当我尝试输出向量的元素时,我得到的只是对对象的引用,而不是对象属性。

4

5 回答 5

3

当您调用System.out.println()(或类似方法)并将其传递给类的实例时,会隐式调用该类的toString()方法。您看到的是从类toString()继承的默认实现。Object

如果您想更改输出,只需toString()在您的类中提供您自己的实现,返回您想要的信息。

于 2012-10-10T10:02:35.433 回答
2

您可以使用增强的for循环访问它们:

Vector<YourObject> vector = ...;

for(YourObject obj : vector)
{
    System.out.println(obj.YOUR_METHOD_OR_ATTRIBUTE);
}

或通过使用elementAt(position)

System.out.println(vector.elementAt(position).YOUR_METHOD_OR_ATTRIBUTE);

或者最后,覆盖该toString()方法并使用:

System.out.println(vector.elementAt(position));
于 2012-10-10T10:01:40.813 回答
1

当您打印任何类的实例时,Object将调用类的 toString() 方法。

您需要覆盖toString自定义类中的方法,并打印您想要的属性。然后toString()将调用您的方法而不是Object'stoString..

或者,您可以有一个getter方法,并在每个实例上调用它

public class Custom {
    private String attr;

    public String getAttr() {
         return this.attr;
    }

    @Override
    public String toString() {
         return attr;
    }
}

然后,当您打印您的实例时,toString()将被调用,并且attr将打印值。

Vector<Custom> yourVector = ...;

for (Custom val: yourVector) {
    System.out.println(val);  // Will invoke `toString()` and print attr value.
    System.out.println(val.getAttr());  // Prints attr value
}
于 2012-10-10T10:03:00.533 回答
1

在 Vector 上使用泛型很重要。如果不这样做,您将获得 java.lang.Object 类型的对象,除非您强制转换它们。

所以像这样定义它:

Vector<MyObject> vector = new Vector<MyObject>();

代替

Vector vector = new Vector();
于 2012-10-10T10:09:54.850 回答
0

如果您使用System.out.println(v),其中 v 是您Vector的元素,那么您需要实现toString()自定义对象的方法。这样,您将覆盖您现在获得的默认 Object#toString() 行为。

于 2012-10-10T10:04:52.670 回答