【问题标题】:Kotlin reflection is not availableKotlin 反射不可用
【发布时间】:2017-06-03 21:07:36
【问题描述】:

我试图从video 的第一个示例中学习高阶函数。这是我的代码和输出。

代码

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

输出

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

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

【问题讨论】:

    标签: kotlin higher-order-functions


    【解决方案1】:

    除了kotlin-stdlib 之外,完全反射还需要kotlin-reflect 库。 如果完全反射可用,它可能会有更全面的toString(),因此是消息。

    【讨论】:

    • 是的。而已。将compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version" 添加到 build.gradle 解决了这个问题。
    • 添加反射库解决了我的构建问题(太棒了!),但不允许我构建 APK。编译器会抛出一个Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'. 任何想法为什么,或者如何解决它?
    • @LucasP。 kotlin-reflect 包含很多方法,可能会将您的 APK 方法计数推高到 64K 限制之上。您可以通过启用multidex、改用kotlin.reflect.lite(如果适用)或直接忽略警告来修复它
    • 这似乎已在 1.3 版中修复
    • 添加这个库kotlin-reflect
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多