我有这个结构:
///Creep.java///
public interface Creep extends Movable<Position2D> {
...
}
///Movable.java///
public interface Movable<T extends Position2D> {
...
void setMovementStrategy(MovementStrategy<Movable<T>> movementStrategy);
MovementStrategy<Movable<T>> getMovementStrategy();
}
///MovementStrategy.java///
public interface MovementStrategy<T extends Movable<? extends Position2D>> {
void executeMovement(T movable);
}
///CreepImpl.java///
public class CreepImpl implements Creep {
...
@Override
public void setMovementStrategy(MovementStrategy<Creep> movementStrategy) {
// TODO Auto-generated method stub
}
@Override
public MovementStrategy<Creep> getMovementStrategy() {
return null;
}
}
我的问题是泛型不支持
MovementStrategy<Creep>
,但它却接受MovementStrategy<Movable<Position2D>>
。我认为这很奇怪,因为Creep
扩展了Movable<Position2D>
。这在方法public MovementStrategy<Creep> getMovementStrategy()
和public MovementStrategy<Creep> getMovementStrategy()
的上下文中。
这可能不可能吗?或者我做错了什么?
任何帮助都将不胜感激!
编辑
忘记包含MovementStrategy源代码.. 唉!
MovementStrategy<Movable<Position2D>>
不等于MovementStrategy<Creep>
,当Creep
是Movable<Position2D>
的更具体类型时。 - netbrain