我正在模拟我有ArrayList<Contact>
的电话簿。如何覆盖toString()
函数以便让这样的事情发生System.out.println(phonebook)
?
Name: name1; Number: number1;
Name: name2; Number: number2;
Name: name3; Number: number3;
etc.....
这有效:
public String toString() {
String phoneBookString = "";
for(Contact contact : list) { phoneBookString += contact.toString() + "\n"; }
return phoneBookString; }
答案 0 :(得分:3)
您可以使用anonymous class为单个对象定义自己的toString()
方法,如下所示:
ArrayList<Contact> phonebook = new ArrayList<Contact>() {
@Override
public String toString() {
// do stuff
}
};
答案 1 :(得分:1)
您需要首先覆盖toString()
的{{1}}方法:
Contact
然后在打印出这段代码时,您想@Override
public String toString() {
return "your string representation";
}
做phonebook
循环:
for
将for (Contact contact : phonebook) {
System.out.println(contact);
}
作为自己的类可能值得考虑,以便您可以实现自己的Phonebook
方法。
额外的,当使用Java 8时,您可以执行以下操作,而不是编写3行代码,您可以将它写在一个更长的行中:
toString()
对于phonebook.forEach(System.out::println);
中的所有System.out.println(T)
个实例,这将致System.out.println(Phonebook)
,已解析为Contact
。
答案 2 :(得分:0)
如果您真的希望toString
ArrayList
的行为与ArrayList
的内置toString
不同,您可以定义自己的子类:
class ContactList extends ArrayList<Contact> {
// duplicate the constructors in ArrayList
public ContactList() { super(); }
public ContactList(Collection<? extends E> c) { super(c); }
public ContactList(int initialCapacity) { super(initialCapacity); }
@Override
public String toString() {
// your version
}
}
现在,您可以创建ContactList
类型的对象,它们的行为就像ArrayList<Contact>
,但toString()
的行为会有所不同。
但是,如果您的计划是在其他PhoneBook
课程中仅使用 ,那么这不值得付出努力;最好在PhoneBook
内写一个私有方法:
private String toString(ArrayList<Contact> a) { ... }
然后使用它。 (如果你有一个拥有私人ArrayList<Contact>
成员的PhoneBook课程就是这种情况,而你唯一的用途就是写下toString()
课程的PhoneBook
。这是不可能的。需要为toString()
成员编写覆盖ArrayList<Contact>
;只需编写一个实用工具方法来创建所需的字符串。)
答案 3 :(得分:0)
首先,没有很好的方法来@Override ArrayList的toString()方法。 但还有其他不错的选择:
建议第一: 覆盖列表中对象的toString()方法。 ArrayList自动调用封闭类型的toString来打印元素的字符串表示。 然后你可以这样做:
// Converting ArrayList to String using Spring API , result is comma separated String
String phonebookToString = StringUtils.collectionToCommaDelimitedString(phonebook);
System.out.println("String converted from ArrayList : " + phonebookToString);
或者这个:
String phonebookString = "";
for (Phone p : phonebook)
{
phonebookString += p.toString() + "\t";
}
System.out.println(phonebookString);
建议二: 写静态方法
static void phoneBookToString(ArrayList<Phone> phonebook) { ... }
做我在第一个建议中所写的内容。