我有以下幾點:混亂與Java泛型和子類
- 一個抽象類
BaseScore
LevelScore
這是BaseScore
一個子類,然後我有:
抽象類
BaseScoreRecord
public abstract class BaseScoreRecord<T extends BaseScore> { public BaseScoreRecord(){ init(); } protected T[] mScoreHistory; protected int count=0; protected float finalScore; protected abstract void calcFinalScore(); protected abstract void init(); public float getFinalScore() { return mFinalScore; } public void addScoreRecord(T score){ mScoreHistory[count] = score; count++; } }
...和
MyScoreRecord
這是BaseScoreRecord
public class MyScoreRecord extends BaseScoreRecord<LevelScore> { public MyScoreRecord(){ init(); } @Override protected void calcFinalScore(){ //Does some stuff to calc final score from mScoreHistory } @Override protected void init(){ mScoreHistory = new LevelScore[10]; for (int i=0;i<mScoreHistory.length;i++){ mScoreHistory[i] = new LevelScore(); } }; }
子類,所以,那我也BaseGame
其中有如下一行:
protected BaseScoreRecord<? extends BaseScore> endGameRecord;
.. 。和MyGame
,它是BaseGame
的子類。 MyGame
包括以下方法:
@Override
protected void gameInit(){
endGameRecord = new MyScoreRecord(); //endGameRecord initialised
}
protected void addLevelScore(LevelScore ls){
mEndGameRecord.addScoreRecord(ls);
}
我拿到這最後的方法編譯器錯誤:
The method addScoreRecord(capture#3-of ? extends BaseScore)
in the type BaseScoreRecord <capture#3-of ? extends BaseScore>
is not applicable for the arguments (LevelScore)
...所以我evidentially做關於仿製藥,通配符和子類不對勁。如果我在BaseGame
和MyGame
中丟失了泛型,它似乎都運行時沒有任何討厭的ClassCastException錯誤。任何指針將不勝感激。也許我讓自己變得太複雜了?
「addLevelScore」方法中的mEndGameRecord是什麼?你的'EndGameScore'類型在哪裏? – 2013-03-22 04:56:18
@Rohit對不起。發現得好。這就是它所說的 - 我通過我的文章中途決定更改班級名稱。已編輯帖子。 – Jon 2013-03-22 05:01:01