我有这种实现
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(' ');
}
}