java - 使用仅在子类中定义的方法 - 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)。
解决方案
非常简单,在该类中声明父级abstract
并声明execute()
为abstract
好。然后也声明doSomething
in 父级,但使其不是抽象的。然后execute()
从doSomething()
abstract class Parent {
abstract void execute();
void doSomething() {
execute();
}
}
class B extends Parent {
void execute() {
//do some specific things for B
}
}
推荐阅读
- javascript - 使用 React Native 在标签栏中显示图标
- excel - 在文本列表中查找下一个数字
- google-cloud-dataflow - 如何在 Google Dataflow 作业中使用 ImpersonatedCredentials?
- swift - 如何在 MapKit 中进行长按事件
- c# - 成员“身高”无法识别或无法访问
- r - 使用 unnest_tokens 标记数据框会给我错误?
- java - Postgres Batch-Insert into 2 Tables where Table2 Needs ID from Table1: a Multi-Insert with ";" 不允许
- php - 为什么我在 ajax 发布后没有重定向?
- python - Pygame pygame.Rect 如何将文本添加到矩形中并在屏幕上移动?
- powershell - 如果用户在下次登录时仍有检查更改密码,则禁用 ADuser