个性化阅读
专注于IT技术分析

Kotlin反射

点击下载

本文概述

反射是一组语言和库功能, 可在运行时检查程序的结构。 Kotlin将函数和属性作为该语言的一等公民来使用, 并在运行时检查这些函数和属性。

类参考

类引用用于获取KClass对象的引用。要获取静态Kclass的引用, 我们应该使用类文字(即, 使用双冒号)。

类引用的语法:

val c1 = String::class
val c2 = MyClass::class

参考值是KClass的类类型。 KClass类引用与Java类引用不同。我们通过在KClass实例上使用.java属性来获取Java类引用。

注意:KClass代表一类并提供检查功能。要获取此类的实例, 请使用语法:: class。

功能参考

Kotlin功能用于使用双冒号获取功能参考。函数的引用可以在另一个函数中用作参数。要在另一个函数中使用此引用, 我们使用::运算符:

fun isPositive(x: Int) = x> 0
fun isPositive(x: Int) = x> 0
val number = listOf(-10, -5, 0, 5, 10)
print(number.filter(::isPositive))

Kotlin功能参考示例

fun main(args: Array<String>) {
    fun isPositive(x: Int) = x > 0
val numbers = listOf(-10, -5, 0, 5, 10)
println(numbers.filter(::isPositive)) 
}

输出:

[5, 10]

在上面的程序中, :: isPositive是函数类型(Int)->布尔值的值。

重载的函数引用运算符(::)

当从上下文中知道期望的类型时, 可以将运算符::与过载函数一起使用。例如:

创建一个函数isPositive(), 它接受两种不同的Int和String类型, 并使用不同的类型参数调用此函数。

fun main(args: Array<String>) {
    fun isPositive(x: Int) = x > 0
    fun isPositive(s: String) = s== "kotlin" || s == "Kotlin"

val numbers = listOf(-10, -5, 0, 5, 10)
val strings = listOf("kotlin", "program")

println(numbers.filter(::isPositive))
println(strings.filter(::isPositive))
}

输出:

[5, 10]
[kotlin]

物业参考

我们还可以在Kotlin中将属性作为第一类对象进行访问, 要访问对象属性, 可以使用::运算符:

要评估类型KProperty <Int>的属性对象, 我们使用表达式:: variableName。表达式:: variableName允许使用名称检索其属性名称, 并使用get()函数读取其值。

要重置可变类型属性的值, 引用属性具有set()方法。

fun main(args: Array<String>) {
println(::x.get())
println(::x.name)
println(::y.set(10))
}
val x = 5
var y = 5

输出:

5
x
10

访问成员类的属性

属性引用还访问类的其他成员的属性。例如:

class A(val x: Int)
fun main(args: Array<String>) {
val prop = A::x
println(prop.get(A(5)))
}

输出:

5
赞(0)
未经允许不得转载:srcmini » Kotlin反射

评论 抢沙发

评论前必须登录!