我看过一个人可以使用
ArrayList<Object> objectList = new ArrayList<Object>();
为了生成可能包含不同种类对象的列表(例如对象A和对象B)。我也看到过答案,状态可以使用
for (Object obj : objectList){
if(obj.getClass() == A.class){
doSomething();
}
}
然而,有人提到这不是一个非常优雅的方法。另一方面,如果我使用抽象类或接口,我需要对对象A和对象B使用相同的方法。例如,如果A.get()返回一个整数,则B.get()也必须返回一个整数。但我想要的是使用我的objectList的方法将为objectList中包含的不同对象做一些不同的事情。所以A.get()可以返回一个整数,B.get()可以返回一个字符串。
所以我想问你们,最好的办法是什么?写一个&#34; hack&#34;并不困难,但我想编写好的代码。
感谢。
答案 0 :(得分:1)
如果您的方法doSomething()
高度依赖于对象类型,则可以将其移动到这些对象并使用界面。
public interface Foo {
void doSomething();
}
public class A implements Foo {
public void doSomething() {
// do something
}
}
for (Foo obj : objectList){
obj.doSomething();
}
这有多优雅取决于doSomething()
中的做法。如果每个对象真的不同,这种方法可能会起作用。如果它是相似的,请尝试仅识别差异并将其封装在界面中,如上所示。
答案 1 :(得分:0)
喜欢这个吗?
public class BaseClass {
public void method() {}
}
2
public class ChildOne extends BaseClass {
public void method() {
System.out.println("inside ChildOne");
}
}
3
public class ChildTwo extends BaseClass {
public void method() {
System.out.println("inside ChildTwo");
}
}
4
public class Client {
public static void main(String[] args) {
List<BaseClass> obj = new LinkedList<>();
obj.add(new ChildOne());
obj.add(new ChildTwo());
for (BaseClass b : obj) {
((BaseClass) b).method();
}
}
}