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(", ")
}
}
9条答案
按热度按时间piv4azn71#
你是想要“backing field”中的字段还是“properties”中的字段......Kotlin实际上只有属性。你可以使用以下方法为某个类获取这些属性:
在Java
Class<T>
中,使用kotlin
扩展属性获取KotlinKClass<T>
,您可以从中继续:这需要将
kotlin-reflect
依赖项添加到构建和类路径中。对于属性背后的秘密支持字段,请使用Java反射,风险自负。
cczfrluj2#
现在很容易与Kotlinv1.1,你可以使用以下方法来获得kotlin中的字段
其中MyClass是您选择的类。
要使用此功能,您需要在gradle构建文件中包含kotlin-reflect,如下所示
此外,如果您需要java字段,也可以直接从javaClass中获取字段(在某些情况下很有用,因为这些字段覆盖的范围略有不同)
41ik7eoe3#
简单的回答
在您构建.gradle(应用程序)文件时
然后呢
干杯!!!
c9x0cxw04#
你不能在Kotlin中这样做,但是在java中有一个肮脏的不可靠的方法来做到这一点。你可以使用java反射。就像这样:
让我们来测试一下:
结果:
工作正常)
bvn4nwqk5#
假设一个名为
Mine
的自定义类名为
isMethod
的新用户函数在声明一个
Mine
示例并对其进行测试之后。aamkag616#
如果您希望属性的顺序与使用
Kotlin-reflect
声明的顺序相同:MyClass::class.primaryConstructor.parameters
个hwamh0ep7#
我们可以使用
memberProperties
。示例:
u4dcyp6a8#
关于
foo
变量的示例,您可以通过以下方式获取其支持字段:ix0qys7i9#
就像这样:
效果很好