我有這樣的結構:Java泛型,爲什麼在泛型中使用繼承是非法的?
///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源..衛生署!
究竟什麼是你得到的錯誤,並在代碼行? –
那麼,沒有錯誤,更多的日食警告和紅色的下劃線:)。我的問題更多的是爲什麼當'Creep'是一個更具體的類型'Movable' –
netbrain
btw時,爲什麼'MovementStrategy>'等於'MovementStrategy ',MovementStrategy不應該是通用的。它總是適用於Movable對象, –
Bozho