Kotlin-泛型继承的返回类型
我有一个泛型父类:Kotlin-泛型继承的返回类型,kotlin,generics,inheritance,gson,Kotlin,Generics,Inheritance,Gson,我有一个泛型父类: open class Parent<T>{/*...*/} 当然,上面的行不会编译,因为父级需要一个泛型参数。派生类不是同一类型的,所以我不希望能够以多态方式处理这个问题。我怎样才能做到这一点?我对科特林很熟悉,但这似乎是作弊 如果有帮助的话,我将使用此模式使用gson库在正确的子类中解析json(通过重写反序列化程序)您可以不使用Parent,但是如果Foo1和Foo2之间存在关系(例如扩展公共接口,Buzz)然后您可以使用类似于Parent的东西 IIRC
open class Parent<T>{/*...*/}
当然,上面的行不会编译,因为父级需要一个泛型参数。派生类不是同一类型的,所以我不希望能够以多态方式处理这个问题。我怎样才能做到这一点?我对科特林很熟悉,但这似乎是作弊
如果有帮助的话,我将使用此模式使用gson库在正确的子类中解析json(通过重写反序列化程序)您可以不使用
Parent
,但是如果Foo1
和Foo2
之间存在关系(例如扩展公共接口,Buzz
)然后您可以使用类似于Parent
的东西
IIRC,
就像Java的通配符
。不限制响应类型将意味着您需要在函数的调用站点getDerived
上设置一些类型保护,以使响应可检查。不幸的是,foo之间没有真正的关系(除非为此我强制设置类型保护,这似乎是个坏主意)。Parent比kotlin更具约束性。因此,也许这是一个更好的想法,Parent是可以接受的。如果我的回答回答了你的问题,请随意接受我的回答。其实没有一种方法可以做你想做的事情。如果您不知道调用此函数的地方的父类型是什么(可能您不知道,因为它只是包含在某个可能有任何值的枚举中),那么编译器也不知道。您只能安全地返回家长,这对您来说可能是无用的。
class Derived1 : Parent<Foo1> {/*...*/}
class Derived2 : Parent<Foo2> {/*...*/}
fun getDerived(derived: SomeEnumType): Parent{
//return the correct derived class
}