获取枚举值的注解
Getting annotation of enum value
我知道如何在 Java 中获取枚举值的注释。
然而 Kotlin 有自己的反射库,我觉得应该有更好的方法来完成这项工作。
可以请任何人 post 举个例子。
具体来说,让我们定义一个枚举 class
enum class Enum {
@SerialName("constant")
Constant
}
我需要一个函数 f(e: Enum): String
以便 f(Enum.Constant) == "constant"
.
我在这里只做了一点研究,但 Kotlin 反射库似乎不支持这一点。事实上,我发现 linter 甚至没有正确地为你的注释建议 FIELD
的注释目标,如果你给它一个不适用于 Enum 值的注释,而是错误地提供自动添加 FIELD
的目标=12=].
问题在于 Enum 值基本上是静态成员字段,除了 Enum 类 之外,Kotlin 中不存在这些字段。反射 类 似乎没有提供访问这种特殊情况的方法。
然而,我正在努力想出一个无法使用枚举构造函数中的属性解决的枚举值注释的用例。
enum class MyEnum(val someConstant: String? = null) {
SomeValue("myConstant")
}
您可以使用与 java 类似的方法,通过名称获取字段,然后使用注释 class 访问注释。
因此,如果您有以下枚举和注释 class 定义;
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))
}
希望对您有所帮助。
我知道如何在 Java 中获取枚举值的注释。 然而 Kotlin 有自己的反射库,我觉得应该有更好的方法来完成这项工作。 可以请任何人 post 举个例子。
具体来说,让我们定义一个枚举 class
enum class Enum {
@SerialName("constant")
Constant
}
我需要一个函数 f(e: Enum): String
以便 f(Enum.Constant) == "constant"
.
我在这里只做了一点研究,但 Kotlin 反射库似乎不支持这一点。事实上,我发现 linter 甚至没有正确地为你的注释建议 FIELD
的注释目标,如果你给它一个不适用于 Enum 值的注释,而是错误地提供自动添加 FIELD
的目标=12=].
问题在于 Enum 值基本上是静态成员字段,除了 Enum 类 之外,Kotlin 中不存在这些字段。反射 类 似乎没有提供访问这种特殊情况的方法。
然而,我正在努力想出一个无法使用枚举构造函数中的属性解决的枚举值注释的用例。
enum class MyEnum(val someConstant: String? = null) {
SomeValue("myConstant")
}
您可以使用与 java 类似的方法,通过名称获取字段,然后使用注释 class 访问注释。
因此,如果您有以下枚举和注释 class 定义;
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))
}
希望对您有所帮助。