关于在类(数据类或POJO)中重写toString()方法和调用list.toString()的混淆?



我有这种实现

static class InnerClassStudent{
String name;
int age;
InnerClassStudent(String name,int age){
this.name = name;
this.age = age;
}

@Override
public String toString() {
return "name :" + name + "," + "age: " + age;
}
}

然后我创建、添加和打印列表中的项目。

List<InnerClassStudent> listOfInnerClassStudent = new ArrayList<InnerClassStudent>();
//add items
//print items
System.out.println("InnerClasslist : " + listOfInnerClassStudent.toString());

然后输出为

InnerClasslist : [name :Mr.B,age: 21, name :Mr.Y,age: 19, name :Mr.C,age: 30]

所以,这里我对 toString(( 方法有一些困惑。 我正在调用list.toString((,这意味着toString((需要是内部List类或其父类的函数。

因此,它的实际实现是在Object 中.java

public String toString() {
return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}

所以,我的问题和困惑是,当我在我所需的类中重写toString(( 时,它们如何协同工作以打印重写toString(( 方法中相应地提到的项目列表。

我希望我已经把我的问题说得足够清楚了。谢谢。

ArrayList有自己的toString继承自AbstractCollection的实现

public class ArrayList<E> extends AbstractList<E>

抽象列表定义,

public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E> 

public String toString() {
Iterator<E> it = iterator();
if (! it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = it.next();
sb.append(e == this ? "(this Collection)" : e);
if (! it.hasNext())
return sb.append(']').toString();
sb.append(',').append(' ');
}
}

最新更新