이 글의 앞부분에서 설명한대로 내 태스크는 변환기를 만드는 것입니다. How do you use a generic type as return value and a generic type as a parameter?인수 유형이 명확하지 않은 경우 Generics가있는 팩터
간단히 말하자면, 다른 언어로 번역해야하는 언어가 있습니다. 이렇게
public abstract class Translator <T extends OriginalText, V extends LanguageTranslation> {
public abstract V translate(T originalText);
}
새로운 도전은 디자인 타임에 내가 OriginalText
의 하위 클래스는 번역하지 않지만, 슈퍼 클래스 OriginalText
오히려 인스턴스 있다는 것입니다. 따라서 translate
함수의 구현을 호출 할 때 특정 LanguageTranslation
V를 설정할 수 있지만 하위 클래스 인 EnglishText
, ChineseText
등과 반대 인 OriginalText
을 유지해야합니다. OriginalText
(서브 클래스가 여러 가지 속성이 있습니다)에 특정한 방식으로 내가 제공 한 LanguageTranslation
서브 타입에 번역 - 또는 공장 -
// 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' 클래스의 번역 방법을 사용하고 있습니까? –
통역자에게 전화 할 방법을 지정하십시오. 런타임시 Object # getClass()를 사용하여 인스턴스의 텍스트 구현 클래스를 얻을 수 있으므로 차이가 보이지 않습니다 ... – AlexR
마지막 질문부터 대답하려면 : 예, 모든 하위 클래스 OriginalText는 공통점이있어서 번역해야합니다 (즉, 인터페이스를 통한 추상 클래스). 첫 번째 질문에 대답하려면 : 번역자는 하위 분류 된 OrignalText의 특수 특성을 읽고 사소한 변경 및 번역만으로 LanguageTranslation에 복사해야합니다. 특별한 것은 없지만 각각을위한 적절한 치료. – feder