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学习笔记(六)-反射

    [toc] 前言 这一节为Kotlin反射,主要是在Kotlin中时用Java-Api来实现反射,使用Kotlin...

  • Kotlin和Java互相调用(二)

    Kotlin反射 正如在前面不少代码中所见到的, Kotlin也提供了反射 API,这些反射 API可以方便程序在...

  • Java 反射 VS Kotlin 反射

    Kotlin 跟 Java 可以无缝衔接,因此 Kotlin 能够使用 Java 的反射机制。另外,Kotlin ...

  • Kotlin Json 序列化1 - 基本功能实现

    参考: https://github.com/yole/jkid 预备知识 Kotlin 反射; Kotlin 注...

  • Kotlin 反射

    反射是语言与库中的一组功能, 可以在运行时刻获取程序本身的信息。 类引用 要得到一个静态的已知的 Kotlin 类...

  • Kotlin反射

    Kotlin把函数和属性当成“一等公民”,并可通过反射直接获取函数、属性的引用。 一、类引用 Kotlin的类引用...

  • Kotlin反射

    简单记录https://www.cnblogs.com/liumaowu/p/9413264.html

  • Kotlin反射

    Kotlin中KClass反射 Kotlin是函数式编程语言,它有一些独有的特性,例如,在Kotlin中的Prop...

  • Kotlin使用注解

    Kotlin的反射也提供了一些支持注解的API。 一、提取注解信息 Kotlin使用kotlin.Annotion...

  • Kotlin反射(1)反射API

      反射(Reflection) 是程序的自我分析能力,通过反射可以确定类中有哪些函数以及属性。反射机制在一般的应...

网友评论

    本文标题:Kotlin 反射

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