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() }