我有几个 Java 接口/ABC/类:
public abstract class Target {
public abstract void fire(Load load);
}
public class HttpTarget extends Target {
@Override
public void fire(Load load) {
// ...
}
}
public interface Load {
// ...
}
public class HttpLoad implements Load {
// ...
}
// Inside a driver
Target target = testSuite.getTarget();
Load load = testSuite.getLoad();
target.fire(load);
所以本质上是一个Target
罐头。我的主应用程序不关心返回的类型,或者返回的类型。它的工作是确保负载被触发。fire()
Load
Driver
Target
getTarget()
Load
getLoad()
我想将fire()
内部的方法定义更改HttpTarget
为:
@Override
public void fire(HttpLoad httpLoad) {
// ...
}
Target
但是,当我这样做时,Java 抱怨方法覆盖与其父类提供的定义不匹配(因为Load
和HttpLoad
是两个不同的东西)。
这里有什么解决方案?泛型?抽象工厂?最终,我希望能够强制执行 thatHttpTarget
的fire()
方法只能接受HttpLoad
s,但仍然与Driver
代码兼容。有人可以提供代码示例吗?提前致谢!