关于在 Class(数据 class 或 POJO)中覆盖 toString() 方法并调用 list.toString() 的混淆?
Confusion regarding Overriding toString() method in a Class(Data class or POJO) and calling 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 class 或其父级 class.[= 内部的函数17=]
所以,它的实际实现是在Object.java
public String toString() {
return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}
所以,我的问题和困惑是,当我 Override 我需要的 class 中的 toString() 时,它是如何一起工作来打印 List Of Overridden toString() 方法中相应提到的项目。
我希望我已经把我的问题说清楚了。谢谢。
ArrayList
有自己的 toString
实现,继承自 AbstractCollection
public class ArrayList<E> extends AbstractList<E>
AbstractList 定义,
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(' ');
}
}
我有这种实现方式
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 class 或其父级 class.[= 内部的函数17=]
所以,它的实际实现是在Object.java
public String toString() {
return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}
所以,我的问题和困惑是,当我 Override 我需要的 class 中的 toString() 时,它是如何一起工作来打印 List Of Overridden toString() 方法中相应提到的项目。
我希望我已经把我的问题说清楚了。谢谢。
ArrayList
有自己的 toString
实现,继承自 AbstractCollection
public class ArrayList<E> extends AbstractList<E>
AbstractList 定义,
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(' ');
}
}