2013-09-26 155 views
0

我的問題是一個通用的語法問題。如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的子類。我想要做什麼的語法?

+4

' 「ChineseText絕對是一個子類OriginalText的」' - 證明這一點。向我們展示代碼。更好的是,給我們一個[SSCCE](http://sscce.org/)。如果'ChineseText'沒有擴展'OriginalText',我只會得到這個錯誤。 – Dukeling

+0

@feder如果它是一個通用類型,則會發布'OriginalText'。 – TheKojuEffect

回答

2

確保ChineseText extends OriginalText

我沒有收到任何錯誤,如您所說如果ChineseText extends OriginalText

Bound mismatch: The type ChineseText is not a valid substitute for the bounded parameter of the type Translator.

該錯誤只出現在ChineseText沒有延伸OriginalText

2

由於ChineseTextOriginalTextEnglishTranslation孩子的LanguageTranslation孩子,使用通配符extends允許所有類<? extends OriginalText>使用TranslatorTranslator類。通過同樣的方式爲LanguageTranslation

EnglishTranslation

public class EnglishTranslation extends LanguageTranslation{ 

} 

ChineseText

public class ChineseText extends OriginalText{ 

} 

OriginalText

public class OriginalText { 

} 

LanguageTranslation

public class LanguageTranslation { 

} 

ChineseToEnglishTranslator

public class ChineseToEnglishTranslator extends Translator<ChineseText, EnglishTranslation> { 

@Override 
public EnglishTranslation translate(ChineseText originalText) { 
    return null; 
} 
} 
+0

對不起隊友!在我的組件中,我有相同的(生成的)類。一旦我引用了lib A中的一個,而另一次引用了lib B中的那個。對此我感到很遺憾!這些東西通常不會發生在我身上。 – feder

+0

不用擔心,它發生在每個人身上:) –