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
Generics 如何使用kotlin generic避免类型不匹配错误? 代码片段 问题_Generics_Kotlin - Fatal编程技术网

Generics 如何使用kotlin generic避免类型不匹配错误? 代码片段 问题

Generics 如何使用kotlin generic避免类型不匹配错误? 代码片段 问题,generics,kotlin,Generics,Kotlin,我希望将代码编写为val myClass:AbsClass=myClass,但它显示类型不匹配错误。如何解决此问题避免类型转换代码为AbsClass?您应该使用: val myClass: AbsClass<out Any> = MyClass()` or `val myClass: AbsClass<in Nothing> = MyClass() out关键字表示您希望将任何子类型都指定给supertype。MyModel可以指定给任意一个,所以它是可以的 in关键字

我希望将代码编写为val myClass:AbsClass=myClass,但它显示类型不匹配错误。如何解决此问题避免类型转换代码为AbsClass?

您应该使用:

val myClass: AbsClass<out Any> = MyClass()` or `val myClass: AbsClass<in Nothing> = MyClass()
out关键字表示您希望将任何子类型都指定给supertype。MyModel可以指定给任意一个,所以它是可以的

in关键字意味着您希望在我们的示例中,任何超类型都可以分配给子类型Nothing,因此您可以使用MyModel,因为它是Nothing的超类型

这样,在不提供任何您可以指定的预期类型的信息的情况下,就像AbsClass一样,在我看来,没有强制转换或反射的可能性非常少

这是类型差异,也是OOP中最困难的想法之一。您可以在此处阅读更多信息: 您应该使用:

val myClass: AbsClass<out Any> = MyClass()` or `val myClass: AbsClass<in Nothing> = MyClass()
out关键字表示您希望将任何子类型都指定给supertype。MyModel可以指定给任意一个,所以它是可以的

in关键字意味着您希望在我们的示例中,任何超类型都可以分配给子类型Nothing,因此您可以使用MyModel,因为它是Nothing的超类型

这样,在不提供任何您可以指定的预期类型的信息的情况下,就像AbsClass一样,在我看来,没有强制转换或反射的可能性非常少

这是类型差异,也是OOP中最困难的想法之一。您可以在此处阅读更多信息:

我认为这是不可能的,因为foo在语义上是不可能的。只有当您可以将AbsClass更改为不熟悉Kotlin的AbsClass时,这才有效,但我相信Kotlin中的泛型与Java中的泛型相似,这是不协变的。i、 福不是福。所以你不能将一个AbsClass实例分配给一个AbsClass引用。实际上Kotlin中的泛型是协变的,你可以阅读更多关于它的内容,我认为这是不可能的,因为foo在语义上是不可能的。只有当您可以将AbsClass更改为不熟悉Kotlin的AbsClass时,这才有效,但我相信Kotlin中的泛型与Java中的泛型相似,这是不协变的。i、 福不是福。因此,您不能将AbsClass实例分配给AbsClass引用。实际上,Kotlin中的泛型是协变的,您可以阅读更多关于它的内容