我创建了一些自定义类的对象,并为它们分配了不同的属性。然后我将每个对象添加到向量中,但是当我尝试输出向量的元素时,我得到的只是对象的引用,而不是对象属性。
答案 0 :(得分:3)
当您调用System.out.println()
(或类似方法)并向其传递对类实例的引用时,将对该类的toString()
方法进行隐式调用。您所看到的是从toString()
类继承的Object
的默认实现。
如果您想更改输出,只需在您的班级中提供您自己的toString()
实施,即可返回您想要的信息。
答案 1 :(得分:2)
您可以使用enhanced for
loop:
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));
答案 2 :(得分:1)
当你打印任何类的实例时,调用Object
类的toString()方法。
您需要在自定义类中覆盖toString
方法,然后打印所需的属性。然后将调用toString()
方法而不是Object's
toString ..
或者,您可以使用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
}
答案 3 :(得分:1)
在Vector上使用泛型非常重要。如果不这样做,除非进行转换,否则将获得java.lang.Object类型的对象。
所以这样定义:
Vector<MyObject> vector = new Vector<MyObject>();
而不是
Vector vector = new Vector();
答案 4 :(得分:0)
如果您使用的是System.out.println(v)
,其中v是您的Vector
元素,那么您需要实现自定义对象的toString()
方法。这样,您将覆盖现在获得的默认Object#toString()行为。