私は次のものを持っています:
- 抽象クラス
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)
...だから私は明らかにジェネリック、ワイルドカード、サブクラス化に関して何か間違ったことをしている。ジェネリックスを失い、BaseGame
すべてMyGame
が厄介なClassCastExceptionエラーなしで実行されているように見える場合。任意のポインタをいただければ幸いです。多分私は自分自身のために物事を複雑にしすぎたのでしょうか?