public class TestClass {
trait EmptyTrait
class EmptyClass
public var anotherVar:Int? = null
public val contant:Float = 10f
private var emptyTrait:EmptyTrait? = null
val emptyClass:EmptyClass = EmptyClass()
public fun setVal(fieldName: String, value: Int) {
javaClass.getDeclaredField(fieldName).set(this, value);
}
public fun getFieldNames(): String {
return javaClass.getDeclaredFields().map{it.getName()}.join(", ")
}
}
3 回答
你想要“支持字段”中的字段或“属性”中的字段...... Kotlin真的只有属性 . 你可以使用以下方法获得这些课程:
从Java
Class<T>
中,使用kotlin
扩展属性来获取KotlinKClass<T>
,您可以从中继续:这需要将
kotlin-reflect
依赖项添加到构建和类路径中 . 你会在KClass
找到许多其他有用的东西对于属性后面的秘密支持字段,使用Java反射需要您自担风险 .
你不能在Kotlin中做到这一点,但是在java中有一种肮脏的不可靠的方法 . 你可以使用java反射 . 像这样:
我们来测试一下:
结果:
有用 )
现在使用Kotlin v1.1非常简单,您可以使用以下方法获取kotlin中的字段
MyClass是您选择的课程 .
为了使用它,你需要在你的gradle构建文件中包含kotlin-reflect,如下所示
另外,如果你需要java字段,也可以直接从javaClass中获取字段(在某些情况下很有用,因为这些字段覆盖的范围略有不同)