我有一个通用的父类:
open class Parent<T>{/*...*/}
我有一些派生类实现了通用父类的特定实例:
class Derived1 : Parent<Foo1> {/*...*/}
class Derived2 : Parent<Foo2> {/*...*/}
其中 Foo1 和 Foo2 是在别处定义的一些类
我现在需要创建一个基于某些输入参数返回不同派生类的函数:
fun getDerived(derived: SomeEnumType): Parent{
//return the correct derived class
}
当然上面的行不会编译,因为 Parent 需要一个通用参数。派生类的类型不同,所以我不希望能够多态地处理这个问题。我怎样才能做到这一点?我对 kotlin 很熟悉。不过这似乎是作弊。
如果有帮助,我将使用此模式在正确的子类中使用 gson 库解析 json(通过覆盖反序列化器)
答案 0 :(得分:1)
您可以使用 Parent<*>
但如果 Foo1
和 Foo2
之间存在关系(例如扩展通用接口 Buzz
),那么您可以使用类似Parent<out Buzz>
。
IIRC,<*>
就像 Java 的通配符 <?>
。不限制响应类型将意味着您需要在函数 getDerived
的调用点使用一些类型保护以使响应可检查。