我知道如何在Java中获取枚举值的注释。 但是Kotlin有自己的反射库,我觉得应该有更好的方法来完成这项工作。 请任何人举一个例子。
具体来说,让我们定义一个枚举类
enum class Enum {
@SerialName("constant")
Constant
}
我需要一个函数f(e: Enum): String
,以便f(Enum.Constant) == "constant"
。
答案 0 :(得分:1)
我在这里只做了一点研究,但是Kotlin反射库似乎对此不提供支持。实际上,我发现短绒棉子甚至没有为您的注释正确建议FIELD
的注释目标,如果您给它提供了一个不适用于Enum值的标签,而是错误地提出自动添加目标{ {1}}。
问题在于Enum值基本上是静态成员字段,除了Enum类中,在Kotlin中不存在。而且反射类似乎没有提供访问这种特殊情况的方法。
但是,我很难为Enum值注释提出一个用例,而用Enum构造函数中的属性是无法解决的。
CLASS
答案 1 :(得分:1)
您可以对Java使用类似的方法,方法是按名称获取字段,然后使用注释类来访问注释。
因此,如果您具有下面的枚举和注释类定义;
enum class Enum {
@SerialName("constant")
Constant
}
annotation class SerialName(val value: String)
然后您可以定义以下函数并按如下所示调用它;
fun getAnnotationValue(enum:Enum):String = enum.declaringClass.getField(enum.name).getAnnotation(SerialName::class.java).value
fun main(args: Array<String>) {
println(getAnnotationValue(Enum.Constant))
}
希望这会有所帮助。