📜  如何在 Kotlin 中迭代类的属性?

📅  最后修改于: 2022-05-13 01:55:36.104000             🧑  作者: Mango

如何在 Kotlin 中迭代类的属性?

Kotlin 是 JetBrains 开发的一种静态类型的通用编程语言,构建了 IntelliJ IDEA、PhpStorm、Appcode 等世界一流的 IDE。它由 JetBrains 于 2011 年首次推出,是一种新的 JVM 语言。 Kotlin 是一种面向对象的语言,是一种比Java“更好的语言”,但仍可与Java代码完全互操作。 Kotlin 中的反射允许我们在运行时自省程序的结构。这也使我们能够内省类修饰符、方法和属性。在本文中,我们将看到如何迭代 Kotlin 类的属性。所以让我们开始吧!

例子

在以下步骤中,我们将看到如何迭代类的属性:

1. 这是我们的 Student 类,具有 roll_number 和 full_name 属性:

class Student constructor (var roll_number : Int, var full_name : String)

2. 现在,我们将使用 for 语句,因为我们想要遍历一个类可以具有的多个属性:

Kotlin
fun main (args: Array) {
  var student=Student (2013001, "Alok Yadav" )
  for (property in Student : : class. memberProperties){
    println ("${property . name) = ${property . get (student) }")
  }
}


Kotlin
open class Person{
  val isHuman : Boolean = true
}


Kotlin
for (property in Student :: class.declaredMemberProperties) {
  println ("${property.name} = ${property.get(student)}")
}


输出:

full_name = Alok Yadav
roll_number = 2013001

实现非常简单。我们能够实现对类属性的自省,因为我们使用了反射,而memberProperties只是KClass的众多功能之一。需要注意的一点是memberProperties返回在此类及其所有超类中声明的所有非扩展属性。假设我们有一个Person类,如下所示:

科特林

open class Person{
  val isHuman : Boolean = true
}

此外,我们使用Person类扩展了Student类,然后之前使用memberProperties方法的相同代码将产生如下所示的输出:

full name = Aanand Shekhar Roy
roll_number = 2013001
isHuman = true

因此,如果您只想遍历Student类中声明的字段,则需要声明的MemberProperties 方法。这是一个声明成员属性的示例:

科特林

for (property in Student :: class.declaredMemberProperties) {
  println ("${property.name} = ${property.get(student)}")
}

输出:

full_name = alok yadav
roll_number = 2013001

前面的示例是针对 Kotlin kClass的。假设您想要迭代Java Class 的属性,您可以使用 Kotlin 扩展属性来获取 Kotlin KClass,您可以从中继续,例如,

something.javaClass.kotlin.memberProperties.

Kotlin 的反射库提供了一个方法列表,借助这些方法,您可以在运行时执行大量自省。为此,请在 kotlinlanf.org 上查看,或者我们可以说 Kotlin 官方文档,您可以单击此处。