Kotlin 相当于 java:Class<? 延伸 A>

use*_*699 2 generics kotlin

假设我有类 A 作为抽象父类,而 B 和 C 扩展了它。我想创建一个带有输入类 B 和 C 的选项的函数,例如 A 的子类(或 A 本身)

在 java 中,我只需要定义一个类型,就像Class<? : Extends A> 在 Kotlin 中我可以做的那样KClass<*>,但这似乎太自由了。

我怎样才能将选项限制为仅适用于 A 的孩子?

小智 7

在 Kotlin 中,如果你KClass<*>愿意接受所有课程。如果您定义 withKClass<A>将仅接受A类。为了接受 A 及其子项,您定义了KClass<out A>。请参阅下面的示例

abstract class A
class B:A()
class C:A()

fun method (param : KClass<out A>){}

method(B::class)
Run Code Online (Sandbox Code Playgroud)