我遇到一些关于抽象类的问题。我有一个使用设置/获取名称的方法创建的抽象类:
public abstract class Person {
private String firstName;
public void setFirstname(String name)
{
this.firstName = name;
}
public String getFirstName()
{
return firstname;
}
我还有另外两个扩展此类的类,它们是Worker
和Employer
。我创建了不同的工人和雇主,并将其存储在名为WorkPlace
的第四类中的arraylists中。我的问题是,如果我想获得每个Person
的每个名字,有没有办法在不经过每个arraylist并做workerList.get.getFirstName
之类的事情的情况下做到这一点?
答案 0 :(得分:3)
除非你的抽象类静态地保存所有名字的记录,否则你提供一个静态方法来获取所有这些名字。
答案 1 :(得分:1)
也许你可以创建一个像Workplace
这样的类,每当你想要一个新的雇主或工人时,你会调用workplaceName.newWorker()
的效果,这会返回一个新的Worker
和同时跟踪所有Worker
,以便稍后调用workplaceName.getAllWorkerNames()
。
答案 2 :(得分:1)
您可以做的是覆盖toString()
类中的Person
方法并返回名字。
当你离开ArrayList.toString()
时,就像[firstname1, firstname2, firstname3]
一样。您可以删除前导括号和尾随括号,并使用", "
拆分字符串。这有点复杂,可能会因为不必要的字符串操作而降低性能,但您不需要遍历集合中的所有元素。
以下是一个例子:
// in Person class do this
@Override
public String toString() {
return this.firstName;
}
// in your WorkPlace class do this
public String[] getAllFirstNames() {
String allNames = workerList.toString();
allNames = allNames.substring(1, allNames.length - 2);
return allNames.split(", ");
}
这应该有效并且没有循环(更好:没有你自己编写的循环)。但如前所述,它可能会花费很多。另外,如果集合的toString()
方法的行为发生变化,它可能不会很节省。
答案 3 :(得分:0)
所以如果你有:
ArrayList<Person> list = new ArrayList<Person>();
然后:
Employer e1 = new Employer();
Worder w1 = new Worker();
list.add(e1);
list.add(w1);
然后你必须这样做:
list.get(0).getFirstName();