Max*_*Max 2 java generics inheritance overloading
我有一个接口I,两个实现它的类A和B以及一个通用类型接口I的列表,因此它可以包含A和B类型的对象.
class A implements I
class B implements I
List<I> myList
Run Code Online (Sandbox Code Playgroud)
我想写(在一个单独的类中)两个方法进程(A a)和进程(B b)所以我可以遍历列表并为每个元素调用进程(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){...}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过在列表中的每个元素上调用'instanceof'然后if-else调用不同的方法来实现这一点,但必须有更好的方法.
在MVC场景中,类A和B在模型中,而类D在Controller中,因此需要分离.
有人可以帮忙吗?
肯定有更好的办法.
有.将方法process()添加到接口I.然后你可以process在迭代时调用这些项目List<I>-
List<I> list = new ArrayList<>();
// populate list with A and B instances, then
for (I i : list) {
i.process();
}
Run Code Online (Sandbox Code Playgroud)
显然A,B必须提供具体的实现process().