有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

泛型如何在java中用接口重写方法

我有一个接口I,两个类A&;实现它的B和一个泛型类型为接口I的列表,因此它可以包含类型a和类型a的两个对象;B

class A implements I
class B implements I
List<I> myList

我想(在一个单独的类中)编写两个方法process(a)和process(B),这样我就可以在列表中循环,并为每个元素调用process(I)和java将自动(unbox?)对象并调用正确的方法

class D{
    processList(){
        for( I i : myList ){
            process( i ); // invoke either process(A) or process(B) based on instanceof
        }
    }
    public void process(A a){...}
    public void process(B b){...}
}

我知道我可以通过在列表中的每个元素上调用'instanceof'来实现这一点,如果有其他方法可以调用不同的方法,但肯定有更好的方法

在MVC场景中,类a和B在模型中,而类D在控制器中,因此需要分离

有人能帮忙吗


共 (1) 个答案

  1. # 1 楼答案

    there must be a better way.

    有。将方法process()添加到接口I。然后,您可以在迭代List<I>的同时对这些项调用process

    List<I> list = new ArrayList<>(); 
    // populate list with A and B instances, then
    for (I i : list) {
      i.process();
    }
    

    显然AB必须提供process()的具体实现