Generics 如何使用kotlin generic避免类型不匹配错误? 代码片段 问题
我希望将代码编写为val myClass:AbsClass=myClass,但它显示类型不匹配错误。如何解决此问题避免类型转换代码为AbsClass?您应该使用: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<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中的泛型是协变的,您可以阅读更多关于它的内容