如何使用泛型类型作为返回值和泛型类型作为参数?

时间:2013-09-26 12:14:44

标签: java generics

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

我创建了以下超类。

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

如果我误解了仿制药的概念或者误解了它,请说明。感谢。

1 个答案:

答案 0 :(得分:4)

只需将其添加到您定义Generics的位置:

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个泛型:

  • 运行时确定的LanguageTranslation的子类型
  • 运行时确定的原始文本
  • 的子类型
  • V运行时确定了Object的子类型(默认约束)