如何使用不同类型的addAll()



我有一个课程项目,我不能解决以下问题:

我需要创建一个链接列表,我可以在其中添加一个元素列表从一个名为Person的类,和一个元素列表从一个名为Accounts的类使用addAll()

List<Person> persons= new LinkedList<Person>();
List<Accounts> accounts= new LinkedList<Accounts>();
List<???> elements = new LinkedList<>();
elements.addAll(persons);
elements.addAll(accounts);

我的老师命令做一个类ElementsOfTheBank填充的地方??,但我不明白如何使它工作:(

这是一个不好的例子,但是你的老师可能希望你使用继承。

由于人和帐户都是"银行的元素",所以您的类可以像这样:

class ElementsOfTheBank {
// common variables between Person and Account
}
class Person extends ElementsOfTheBank {
// ...
}
class Account extends ElementsOfTheBank {
// ...
}

然后你可以把这两种类型都添加到你的列表中:

List<ElementsOfTheBank> elements = new LinkedList<>();
elements.addAll(persons);
elements.addAll(accounts);

您需要一个由银行的所有元素共享的公共类型。简单地说,java.lang.Object对它们都是通用的,但也许你被要求制作例如public interface ElementOfBank,这样你就可以将你的Person类声明为class Person implements ElementOfBank {}

一旦你这样做了,你可以声明你的列表是元素:List<ElementOfBank> elements = ...;,你可以调用.addAll(persons)在这样一个列表。毕竟,每个person实例也是一个ElementOfBank,这就是class Person implements ElementOfBank的含义。

不要仅仅使用集合将相关对象组合在一起。

为了将PersonAccount列表放在一起而创建List<Object>是没有多大意义的。引入PersonAccount的共同超级似乎也不是一个好主意。通过继承绑定一个自然人和一个银行账户有什么好处?我更愿意建议通过组合(而不是继承)建立一个人和他们的帐户之间的关系。

更好的选择是创建一个class,比如Bank。这将封装这两个列表。例如,您可以引入管理银行客户及其帐户的行为,而银行实例将成为您需要对其执行的所有操作的单一入口点。

public class Bank {
private List<Person> persons= new LinkedList<>();
private List<Accounts> accounts= new LinkedList<>();
// constructors, getters

public boolean createAccount() {
// TO DO ...
return ...;
}
public Person findPerson(SomeProperty id) {
// TO DO ...
return ...;
}
}

相关内容

  • 没有找到相关文章

最新更新