我有几个 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()LoadDriverTargetgetTarget()LoadgetLoad()
我想将fire()内部的方法定义更改HttpTarget为:
@Override
public void fire(HttpLoad httpLoad) {
// ...
}
Target但是,当我这样做时,Java 抱怨方法覆盖与其父类提供的定义不匹配(因为Load和HttpLoad是两个不同的东西)。
这里有什么解决方案?泛型?抽象工厂?最终,我希望能够强制执行 thatHttpTarget的fire()方法只能接受HttpLoads,但仍然与Driver代码兼容。有人可以提供代码示例吗?提前致谢!