如何正确扩展泛型类?

时间:2013-09-26 13:11:36

标签: java generics

我的问题是一般语法问题。正如在this thread中所回答的那样,我创建了抽象泛型超类。

public abstract class Translator <T extends OriginalText, V extends LanguageTranslation> {            
    public abstract V translate(T originalText);
}

现在,我无法定义子类。

public class ChineseToEnglishTranslator extends Translator<ChineseText, EnglishTranslation> {
    @Override
    public EnglishTranslation translate(ChineseText text) {
        return null;
    } 
}

Eclipse返回错误:Bound mismatch: The type ChineseText is not a valid substitute for the bounded parameter <T extends OriginalText> of the type Translator<T,V>。 ChineseText绝对是OriginalText的子类。我想做什么的语法是什么?

2 个答案:

答案 0 :(得分:2)

确保ChineseText extends OriginalText

我没有收到任何错误,如你所说 ChineseText extends OriginalText

  

绑定不匹配:类型ChineseText不是有效的替代品   有界参数的类型   翻译。

仅当ChineseText未展开OriginalText时才会出现此错误。

答案 1 :(得分:2)

由于ChineseTextOriginalText的孩子而EnglishTranslationLanguageTranslation的孩子,因此使用通配符Translator的{​​{1}}类允许所有人要使用extends的班级<? extends OriginalText>。对Translator

采用相同的方式

<强> EnglishTranslation

LanguageTranslation

<强> ChineseText

public class EnglishTranslation extends LanguageTranslation{

}

<强> OriginalText

public class ChineseText extends OriginalText{

}

<强> LanguageTranslation

public class OriginalText {

}

<强> ChineseToEnglishTranslator

public class LanguageTranslation {

}