Kotlin 反射

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

  • 类引用

要得到一个静态的已知的 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值