Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin-泛型继承的返回类型_Kotlin_Generics_Inheritance_Gson - Fatal编程技术网

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
}