java - 如何用java中的接口(interface)覆盖方法

标签 java generics inheritance overloading

我有一个接口(interface) I,两个实现它的类 A 和 B 以及一个具有通用类型接口(interface) I 的列表,因此它可以包含类型 A 和 B 的两个对象。

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

我想(在一个单独的类中)编写两个方法 process( A a ) 和 process( B 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”然后 if-else 来调用不同的方法来做到这一点,但必须有更好的方法。

在MVC场景下,A类和B类在Model中,D类在Controller中,需要分离。

有人能帮忙吗?

最佳答案

there must be a better way.

有。将方法 process() 添加到接口(interface) I .然后你可以调用process在迭代 List<I> 时在项目上-

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

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

关于java - 如何用java中的接口(interface)覆盖方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25452073/

相关文章:

java - 如何在网络服务器外上传文件?

ios - swift 可选通用类型和嵌套可选展开

c# - 使用 lambda 表达式参数调用泛型方法的反射

C# 与 C++ - 类型、继承和 vtable

c# - .Net 泛型——从接口(interface)实现继承

java - 为 Android 创建 facebook 哈希 key

java - 右键单击 Sonar 选项不可用

java - JSF 2 : Is it possible to inherit @ManagedBean?

java - 使用批处理文件执行Jar中的Main类

c# - 为什么要使用 ICollection<T> 而不是 List<T>,如果我使用 ICollection<T>,那么如何使用 AddRange、Insert 和其他列表方法