如何使用generics类型作为返回值和generics类型作为参数?
我尝试用generics创建一个抽象类。 业务逻辑是将文本从一种语言翻译成另一种语言。 每种语言都必须有一个Translator
类。 我还需要为每种语言使用LanguageTranslation
类,它是translate
方法的返回对象,它接受参数T
该T应该是OriginalText
的子类(例如EnglishText,ChineseText等)。 这就是我奋斗的地方。 你如何编码这个约束?
我创建了以下超类。
public abstract class Translator { public abstract V translate(T originalText); }
如果我误解了仿制药的概念或者误解了它,请说明。 谢谢。
只需将其添加到您定义Generics的位置:
public abstract class Translator { public abstract V translate(T originalText); }
顺便说一句,这很令人困惑,因为V
定义在您的方法中被覆盖。 为什么不这样做:
public abstract class Translator { public abstract V translate(T originalText); }
编辑:解释为什么你在V上有警告
它完全相同:
public abstract class Translator { public abstract K translate(T originalText); }
现在在方法中你有3个generics:
- K运行时确定了LanguageTranslation的子类型
- T的运行时确定了OriginalText的子类型
- V运行时确定了Object的子类型(默认约束)