【发布时间】:2015-06-17 02:30:40
【问题描述】:
有点两部分的问题。
第一部分:
我有一个自定义类联系人,其中包含字符串:电子邮件、姓名、地址、电话号码。请注意,不同的联系人可能有相同的电子邮件。
{dup@mail.com, Chris Cross, XXX, 122334455}
{dup@mail.com, Christian Cross, YYY, 2233445566}
我希望能够通过ArrayList<Contact> 并根据找到的电子邮件列表删除联系人ArrayList<String>。
所以,在某些时候我发现自己想写这个:
for(String email : registeredEmails){
while(contacts.contains(email)) { // custom implementation of contains for ArrayList<Contact>
Contact c = contacts.findContactByMail(email) // custom method for ArrayList<Contact>
contacts.remove(c);
}
}
但无论我在哪里看,压倒性的建议似乎都反对这种完全合理的结构。 我意识到还有其他不依赖于创建 findContactByEmail 的方法,但这种方式更具可读性。
感觉不错!那我可以这样做吗?它不会破坏任何东西是吗?除了关于组合优于继承的抽象辩论之外,还有什么理由我不应该这样做?
第二部分:
我该怎么做?我是 ArrayList 的子类吗?那我最后不是得到一个 MyArrayList<Contact> 吗?不是我想要的样子……
contains 和 findContactByEmail 代码是否在我的 Contact 类中某处或何处?
编辑 这里可能需要一些背景知识。 这是在 Android 应用中。
这一切都发生在应用程序的“朋友”部分。基本上,我得到一个电话联系人列表,用户可以检查这些联系人以发送邀请。
但是,如果此人已经安装了应用,则发送邀请是没有意义的。因此,我根据已安装用户列表检查电话列表。然后回到手机上(在 android 应用程序中),我想在显示之前从电话簿列表中删除这些已安装的用户(他们进入不同的“添加朋友”列表)。
我现在用一个迭代器来实现它,但我的第一反应是为 ArrayList<Contact> 使用自定义方法“findContactByEmail”,并覆盖包含与字符串电子邮件匹配的内容。
【问题讨论】:
-
在扩展 Arraylist 并拥有自己的新方法时,我没有看到任何问题。一旦你创建了自己的数组列表类,你总是可以有一个 MyArrayList
. 的实例,但我建议你也有一个 DB 查询调用。看看这个问题,我不确定该列表是从数据库调用中获取的还是在运行时生成的。 -
我真的不想要 MyArrayList
,我想使用 ArrayList 和额外的方法 findContactByEmail。这是在 Android 应用程序中。我从电话中获取联系人列表,并在服务器上查找已安装用户的数据库。我想在显示之前整理一下联系人列表。 -
@grooble 您正在尝试使您的代码更具可读性,我明白了。我的意思是尝试创建
ArrayList的子类以达到预期效果是不可维护的。相反,让 Java 类保持原样并在您的Contact类中创建实用程序类或具有相关功能,以使您的工作更简单。 -
只需在某处创建一个静态
findContactByEmail(List<Contact>, String)方法和一个静态containsContactWithEmail(List<Contact>, String)...
标签: java android oop arraylist subclass