为什么需要使用 toString 方法来执行此操作?
我建议您将列表传递给您自己制作的自定义格式化程序类。但是,如果您坚持,我认为另一种选择是您扩展 ArrayList 并仅覆盖 toString 方法。
一种选择可能是让 Person 类本身处理格式化它自己类型的项目集合的复杂性:
public class Person {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@Override
public String toString() {
return this.lastName + ", " + this.firstName;
}
public static String toString(Collection<Person> persons) {
Iterator<Person> it = persons.iterator();
if (!it.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
Person e = it.next();
sb.append(e);
if (!it.hasNext())
return sb.append(']').toString();
sb.append('&').append(' ');
}
}
}
然后你可以简单地做这样的事情:
Person p1 = new Person("Obi-wan", "Kenobi");
Person p2 = new Person("Luke", "Skywalker");
List<Person> jedis = new ArrayList<>();
jedis.add(p1);
jedis.add(p2);
System.out.println(Person.toString(jedis));
输出是:[Kenobi, Obi-wan& Skywalker, Luke]
但这只是一个想法。我很确定还有很多其他方法可以做到这一点。