【发布时间】:2020-11-17 11:59:22
【问题描述】:
我正在尝试为我只能访问接口的 java 项目实现一个插件。
项目结构如下:
超类:A
子类:B、C、E 和 F
所有子类 B、C、D、E 和 F 都扩展了类 A,并有一个名为“execute()”的方法。该方法在超类(A)中没有定义。
现在我想在我的插件中实现一个名为“doSomething()”的方法,它使用子类 B、C、D、E 和 F 的“execute()”方法。
而且我不想重复相同的方法 4 次(对于每个子类)。
当我将超类(A)作为参数时,我无法访问子类中定义的方法:
public void doSomething(A a) {
a.execute()
}
我还尝试生成 doSomething() 方法并定义多个上限,如下所示:
public <T extends B, C, D, E, F> void doSomething(T t) {
t.execute();
}
但不能在上限中定义多个类,因为不可能有继承自多个超类的类型。
有没有什么方法可以实现 doSomething() 方法而不复制它或更改子类的源代码?
请注意,我不能更改任何给定的类(A,... F)。
【问题讨论】:
-
如何让子类实现一个名为
Executable的接口,该接口定义execute()。然后你可以在doSomething中做public <T extends A & Executable>
标签: java generics inheritance subclass superclass