首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ArrayList<Contact> toString()

ArrayList<Contact> toString()
EN

Stack Overflow用户
提问于 2014-03-10 21:19:10
回答 4查看 560关注 0票数 0

我正在模拟一个PhoneBook,其中我有一个ArrayList<Contact>。如何对toString()函数进行覆盖,以实现像这样的wen做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; }

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-10 21:22:23

可以使用如下所示的toString()为单个对象定义自己的匿名类方法:

代码语言:javascript
复制
ArrayList<Contact> phonebook = new ArrayList<Contact>() {

    @Override
    public String toString() {
        // do stuff
    }
};
票数 3
EN

Stack Overflow用户

发布于 2014-03-10 21:23:49

首先需要重写ContactContact方法:

代码语言:javascript
复制
@Override
public String toString() {
    return "your string representation";
}

然后,当打印出这段代码,您的phonebook时,您想要做一个for-loop:

代码语言:javascript
复制
for (Contact contact : phonebook) {
    System.out.println(contact);
}

可能值得考虑将Phonebook作为自己的类,这样您就可以实现自己的toString()方法。

另外,在使用Java 8时,您可以执行以下操作而不是编写3行代码--您可以用一行代码编写它:

代码语言:javascript
复制
phonebook.forEach(System.out::println);

这将调用System.out.println(T) (解析为System.out.println(Phonebook) ),用于phonebook中的所有Contact实例。

票数 1
EN

Stack Overflow用户

发布于 2014-03-10 21:27:43

如果您真的希望toStringArrayList行为与ArrayList的内置toString不同,那么您可以定义自己的子类:

代码语言:javascript
复制
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中编写一个私有方法

代码语言:javascript
复制
private String toString(ArrayList<Contact> a) { ... }

然后用这个代替。(如果您有一个具有私有PhoneBook成员的ArrayList<Contact>类,并且您唯一的使用是编写您的PhoneBook类的toString(),则情况就是如此。不需要为toString()成员编写重写的ArrayList<Contact>;只需编写实用程序方法来创建所需的字符串。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22311519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档