我有一个泛型父类:
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需要一个泛型参数。Derived类不是同一类型,所以我不期望能够多态地处理这个问题。我如何才能做到这一点呢?我熟悉Kotlin。除了这一点,其他任何东西都像是作弊。
如果有帮助的话,我正在使用这个模式,用GSON库在正确的子类中解析JSON(通过重写反序列化器)
1条答案
按热度按时间0aydgbwb1#
您可以使用
Parent<*>
,但如果Foo1
和Foo2
之间存在关系(例如,扩展一个公共接口Buzz
),则可以使用类似Parent<out Buzz>
的代码。IIRC,
<*>
类似于Java的通配符<?>
,不绑定响应类型意味着您需要在函数getDerived
的调用位置设置一些类型保护,以使响应可检查。