【发布时间】:2012-09-20 13:09:48
【问题描述】:
我有几个 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 不关心getTarget() 返回什么样的Target,或者getLoad() 返回什么样的Load。它的工作是确保负载被触发。
我想将HttpTarget 中的fire() 方法定义更改为:
@Override
public void fire(HttpLoad httpLoad) {
// ...
}
但是,当我这样做时,Java 抱怨方法覆盖与其父类 Target 提供的定义不匹配(因为 Load 和 HttpLoad 是两个不同的东西)。
这里有什么解决方案?泛型?抽象工厂? 最终,我希望能够强制HttpTarget 的fire() 方法只能接受HttpLoads,但仍与Driver 代码兼容。 有人可以提供代码吗例子?提前致谢!
【问题讨论】:
-
您是否尝试删除 @Override 注释?
标签: java generics inheritance