Kotlin反射不可用

Pra*_*ane 7 higher-order-functions kotlin

我试图从这个视频的第一个例子中学习高阶函数.这是我的代码和输出.

fun lowercase(value: String) = value.toLowerCase()

fun higherOrder(value:String, op: (String) -> String) : String {
    println("Executing higher order fun $op")
    return op(value)
}

fun main(args: Array<String>) {
    println(higherOrder("HELLO", ::lowercase))
    println(higherOrder("hello", {it -> lowercase(it)}))
    println(higherOrder("HeLlo", { x -> lowercase(x) }))
    println(higherOrder("Hello", { lowercase(it) }))
}
Run Code Online (Sandbox Code Playgroud)

产量

Executing higher order fun function lowercase (Kotlin reflection is not available)
hello
Executing higher order fun Function1<java.lang.String, java.lang.String>
hello
Executing higher order fun Function1<java.lang.String, java.lang.String>
hello
Executing higher order fun Function1<java.lang.String, java.lang.String>
hello

Process finished with exit code 0
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,为什么打印Kotlin反射不可用

Kis*_*kae 11

完全反射kotlin-reflect除了需要库kotlin-stdlib.如果完全反射可用,它可能会更全面toString(),因此消息.

  • 对.而已.添加`compile"org.jetbrains.kotlin:kotlin-reflect:$ kotlin_version"`to build.gradle修复了这个问题. (4认同)
  • @卢卡斯P。`kotlin-reflect` 包含很多方法,并且可能将您的 APK 方法计数推高到 64K 限制以上。您可以通过启用 [multidex](https://developer.android.com/studio/build/multidex),使用 [kotlin.reflect.lite](https://github.com/Kotlin/kotlinx.reflect.reflect. lite)代替(如果适用),或者只是忽略警告 (2认同)
  • 解决办法是什么? (2认同)