我的任务是创建一个翻译器,正如我在本线程前面所讨论的那样。如何使用泛型类型作为返回值和泛型类型作为参数?
简而言之,我有一种语言需要翻译成另一种语言。像这样。
public abstract class Translator <T extends OriginalText, V extends LanguageTranslation> {
public abstract V translate(T originalText);
}
新的挑战是,在设计时我没有得到一个OriginalText
要翻译的子类,而是一个超类的实例OriginalText
。因此,当我调用translate
函数的实现时,我可以设置特定的LanguageTranslation
V,但需要保留OriginalText
,与 , 等相反EnglishText
,ChineseText
它们是子类。
// I know response type V (specific class of LanguageTranslation) from a parameter from this function.
// However, this is non-sense anyway, because Translator is abstract.
Translator<OriginalText, V> translator = new Translator<OriginalText, V>();
// At design time, I have no clue what is returned by the repository. Hence, I expect the translate method to do the appropriate decision at run time.
vType = translator.translate(repository.getTextObject(textId))
我希望我的翻译器 - 或工厂 - 以特定于OriginalText
(子类有几个不同的属性)和LanguageTranslation
我提供的子类型的方式进行翻译。有一对一的匹配。但是,我在设计时不知道这一点!我需要像工厂这样的东西来为我创建这个翻译器,对吧?其他方法?双发?