Kotlin方法通用类型验证

我试图写一个方法,采取KProperty1和R的对象像这样

inline fun <T: Any, R: Any> List<T>.test(prop1: KProperty1<T, R>, prop2: R): List<T> 

除非我没有对prop2进行类型检查。 有什么方法可以确保prop2是R型的吗?

这是一个更完整的例子

 class Foo class Bar(val foo: Foo) fun main(args: Array<String>): Unit { val list = listOf(Bar(Foo())) list.test(Bar::foo, Foo()) // This should work list.test(Bar::foo, "") // I want this to be a type error since a string is not a Foo } inline fun <T: Any, R: Any> List<T>.test(prop1: KProperty1<T, R>, prop2: R): List<T> { println(prop1.invoke(this.first())::class == prop2::class) return listOf() } 

如果您想将R限制为Foo子项,则提供上限约束:

 inline fun <T: Any, R: Foo> List<T>.test(prop1: KProperty1<T, R>, prop2: R): List<T> { println(prop1.invoke(this.first())::class == prop2::class) return listOf() }