获取枚举值的注释

时间:2020-05-04 14:56:51

标签: kotlin enums annotations

我知道如何在Java中获取枚举值的注释。 但是Kotlin有自己的反射库,我觉得应该有更好的方法来完成这项工作。 请任何人举一个例子。

具体来说,让我们定义一个枚举类

enum class Enum {
    @SerialName("constant")
    Constant
}

我需要一个函数f(e: Enum): String,以便f(Enum.Constant) == "constant"

2 个答案:

答案 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))
}

希望这会有所帮助。

相关问题