【发布时间】:2014-08-22 16:57:09
【问题描述】:
我有一个接口 I,实现它的两个类 A 和 B,以及接口 I 的泛型类型列表,因此它可以包含 A 和 B 类型的两个对象。
class A implements I
class B implements I
List<I> myList
我想(在一个单独的类中)编写两个方法 process( A a ) 和 process( B b ),这样我就可以循环遍历列表并为每个元素调用 process( i ),java 会自动(取消装箱? ) 对象并调用正确的方法。
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”然后 if-else 来调用不同的方法来做到这一点,但必须有更好的方法。
在MVC场景中,A类和B类在Model中,而D类在Controller中,因此需要分离。
谁能帮忙?
【问题讨论】:
-
你能显示更多的示例代码吗?我很难在你显示的几行之间阅读。
-
编辑:处理方法在哪里?你在 D 班之外展示他们。
-
对不起,处理方法在D类中。
-
使用包装器方法,在该方法中使用 instanceof 处理 if-else
-
这是一个糟糕的解决方案,但我看到的唯一一个可用的解决方案。 OP会更好地接受下面艾略特的答案。
标签: java generics inheritance overloading