gson Kotlin-泛型继承的返回类型

gfttwv5a  于 2022-11-06  发布在  Kotlin
关注(0)|答案(1)|浏览(242)

我有一个泛型父类:

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(通过重写反序列化器)

0aydgbwb

0aydgbwb1#

您可以使用Parent<*>,但如果Foo1Foo2之间存在关系(例如,扩展一个公共接口Buzz),则可以使用类似Parent<out Buzz>的代码。
IIRC,<*>类似于Java的通配符<?>,不绑定响应类型意味着您需要在函数getDerived的调用位置设置一些类型保护,以使响应可检查。

相关问题