使用只在子类中定义的方法-java

eivgtgni  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(228)

我正在尝试为一个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) 是的。

omvjsjqw

omvjsjqw1#

可能是这样的:

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);
guykilcj

guykilcj2#

非常简单,声明父级为 abstract 并宣布 execute() 作为 abstract 在那个班也一样。然后宣布 doSomething 但不要抽象。那就打电话 execute()doSomething() ```
abstract class Parent {
abstract void execute();
void doSomething() {
execute();
}
}

class B extends Parent {
void execute() {
//do some specific things for B
}
}

相关问题