按顺序存储不同种类的对象,并根据其属性使用它们

时间:2016-05-26 09:38:43

标签: java arraylist

我看过一个人可以使用 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;并不困难,但我想编写好的代码。

感谢。

2 个答案:

答案 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();
        }
    }
}