일반 부모 클래스가 있습니다.
open class Parent<T>{/*...*/}
일반 부모의 특정 인스턴스를 구현하는 몇 가지 파생 클래스가 있습니다.
class Derived1 : Parent<Foo1> {/*...*/}
class Derived2 : Parent<Foo2> {/*...*/}
여기서 Foo1과 Foo2는 다른 곳에 정의 된 일부 클래스입니다.
이제 일부 입력 매개 변수를 기반으로 다른 파생 클래스를 반환하는 함수를 만들어야합니다.
fun getDerived(derived: SomeEnumType): Parent{
//return the correct derived class
}
물론 부모가 일반 매개 변수를 필요로하기 때문에 위의 줄은 컴파일되지 않습니다. Derived 클래스는 동일한 유형이 아니므로이를 다형성으로 처리 할 수있을 것으로 기대하지 않습니다. 이것을 어떻게 달성 할 수 있습니까? 나는 kotlin에 익숙하지만 이것은 속임수처럼 보입니다.
도움이된다면이 패턴을 사용하여 gson 라이브러리를 사용하여 올바른 자식 클래스에서 json을 구문 분석하고 있습니다 (디시리얼라이저를 재정 의하여).
당신은 멀리 얻을 수 Parent<*>
있지만, 관계가있는 경우 Foo1
와 Foo2
(공통 인터페이스를 확장 예 :, Buzz
) 당신은 같은 것을 사용할 수 있습니다 Parent<out Buzz>
.
IIRC <*>
는 Java의 와일드 카드와 같습니다 <?>
. 응답 유형을 제한하지 않으면 getDerived
응답을 검사 할 수 있도록 함수 호출 사이트에 유형 가드가 필요합니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다