1

我尝试用泛型创建一个抽象类。业务逻辑是将文本从一种语言翻译成另一种语言。每种语言都必须有一个Translator类。我还需要LanguageTranslation为每种语言创建一个类,它是translate方法的返回对象,它接受参数T。T 应该是OriginalText(例如,EnglishText、ChineseText 等)的子类。这就是我挣扎的地方。你如何编码这个约束?

我创建了以下超类。

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

如果我误解了泛型的概念或应用错误,请指出。谢谢。

4

1 回答 1

4

只需在定义泛型的地方添加它:

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

顺便说一句,这令人困惑,因为V定义在您的方法中被覆盖。为什么不这样做:

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

编辑:解释为什么你对 V 有警告

它与以下内容完全相同:

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

现在在方法里面你有 3 个泛型:

  • K of runtime 确定 LanguageTranslation 的子类型
  • 运行时确定的 OriginalText 子类型的 T
  • V 运行时确定的对象子类型(默认约束)
于 2013-09-26T12:16:10.147 回答