Kotlin 反射

作者: jinkui | 来源:发表于2017-06-01 15:45 被阅读107次

    反射是语言与库中的一组功能, 可以在运行时刻获取程序本身的信息。

    • 类引用

    要得到一个静态的已知的 Kotlin 类的引用, 可以使 class literal 语法:
    val c = MyClass::class
    类引用是一个 KClass 类型的值,Kotlin 的类引用不是一个 Java 的类引用. 要得到 Java 的类引用, 请使用 KClass 对象实例的 .java 属性。

    • 函数引用

    使用 :: 操作符可以获取到函数引用,示例:

    fun isOdd(x: Int) = x % 2 != 0
    
    val numbers = listOf(1, 2, 3)
    println(numbers.filter(::isOdd))
    

    :: 也可以用在重载函数上, 前提是必须能够推断出对应的函数参数类型, 或者可以指定类型:
    val predicate: (String) -> Boolean = ::isOdd

    • 属性引用

    使用 :: 操作符:

    class A(val p: Int)
    
    fun main(args: Array<String>) {
        val prop = A::p
        println(prop.get(A(1))) // 打印结果为: "1"
    }
    
    val String.lastChar: Char
    get() = this[length - 1]
    
    fun main(args: Array<String>) {
        println(String::lastChar.get("abc")) // 打印结果为: "c"
    }
    
    • 构造器引用

    引用构造器使用 :: 操作符, 再加上类名称。

    class Foo
    
    fun function(factory : () -> Foo) {
        val x : Foo = factory()
    }
    
    function(::Foo)
    

    参考
    《Programming Kotlin》Stephen Samuel ,Stefan Bocutiu
    《Kotlin in Action》Dmitry Jemerov,Svetlana Isakova

    相关文章

      网友评论

        本文标题:Kotlin 反射

        本文链接:https://www.haomeiwen.com/subject/lddefxtx.html