Скажем, у меня есть этот Kotlin typealias
:
typealias Checker<T> = (T) -> Unit
fun <T> checkNothing(input: T) = Unit
fun <T> checkSomething(input: T) = makeSomeAssertion(input)
fun <T> doSomethingWithAChecker(checker: Checker<t>) { /* ... */ }
Теперь я могу позвонить doSomethingWithAChecker(::checkNothing)
или doSomethingWithAChecker(::checkSomething)
, что хорошо, но я бы лучше определил val
с лямбдами и правильным псевдонимом типа, так что всегда есть только один экземпляр:
val checkNothing: Checker<T> = { Unit }
val checkSomething: Checker<T> = { makeSomeAssertion(it) }
Но, конечно, поскольку они созданы, у них не может быть этого общего T
, поэтому я должен либо определить типили я не могу передать их в doSomethingWithAChecker
.
Возможно ли это без приведения типов?