[英]using a method that is only defined in the subclasses - JAVA
我正在尝试为一个我只能访问接口的 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)。
非常简单,在该类中将 parent 声明为abstract
并将execute()
声明为abstract
。 然后在 parent 中声明doSomething
但不要抽象。 然后从doSomething()
调用execute()
doSomething()
abstract class Parent {
abstract void execute();
void doSomething() {
execute();
}
}
class B extends Parent {
void execute() {
//do some specific things for B
}
}
大概是这样的:
public static void doSomething(Object object) {
try {
Method method = object.getClass().getDeclaredMethod("execute", null);
method.invoke(object);
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
}
A b = new B();
doSomething(b);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.