gpt4 book ai didi

java - 与 Java 泛型和子类化的混淆

转载 作者:太空宇宙 更新时间:2023-11-04 07:44:20 25 4
gpt4 key购买 nike

我有以下内容:

  • 抽象类BaseScore
  • LevelScoreBaseScore 的子类

然后我有:

  • 抽象类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)

...所以我显然在泛型、通配符和子类方面做错了一些事情。如果我丢失了 BaseGameMyGame 中的泛型,那么一切似乎都可以运行,没有任何令人讨厌的 ClassCastException 错误。任何指示将不胜感激。也许我把事情搞得太复杂了?

最佳答案

您应该声明 MyScoreRecord 实际上是 BaseScoreRecord 的子类,并正确参数化它:

public class MyScoreRecord extends BaseScoreRecord<LevelScore>

例如,如果您使用 Eclipse,您将收到警告,因为 @Override 注释实际上并未覆盖任何内容。上述内容还将使编译器强制 LevelScore 扩展 BaseScore

关于java - 与 Java 泛型和子类化的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15562901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com