繁体   English   中英

使用仅在子类中定义的方法 - JAVA

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM