我想定義一個以 lambda 作為引數的 Kotlin 泛型函式,但我想限制 lambdas 引數和回傳型別的允許型別。我如何在 Kotlin 中做到這一點?
在下面的例子中,我期望約束:where T: Base, V: (T) -> Unit意味著V只能是第一個引數實作的函式Base。
但是,我看到編譯器忽略T: Base了約束的一部分,并將接受任何(Any) -> Unit.
interface Base
fun <T, V> exampleGenericFunction(func: V) where T: Base, V: (T) -> Unit {
println("func is $func")
}
class ImplementsBase : Base
class DoesNotImplementBase
fun main() {
val f1: (ImplementsBase) -> Unit = { }
exampleGenericFunction(f1)
val f2: (DoesNotImplementBase) -> Unit = { }
exampleGenericFunction(f2) // expected this to be a compilation error
}
uj5u.com熱心網友回復:
這種意外行為是由 Kotlin>=1.4編譯器中的錯誤引起的。可以在此處跟蹤此錯誤:https : //youtrack.jetbrains.com/issue/KT-48935。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311192.html
