Mic*_*ing 3 java reflection annotations kotlin
给定这个 Java 注释
@Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonProperty
Run Code Online (Sandbox Code Playgroud)
和这个 Kotlin 数据类
@JsonIgnoreProperties(ignoreUnknown = true)
data class LossDocument(@JsonProperty("id") val id: String)
Run Code Online (Sandbox Code Playgroud)
我希望在这里找到注释
LossDocument::class.java.declaredFields[0].annotations
Run Code Online (Sandbox Code Playgroud)
或这里
LossDocument::class.java.declaredMethods.first { it.name == "getId" }
Run Code Online (Sandbox Code Playgroud)
但两者的注释都为零。这是一个错误吗?根据53843771,我的印象是这应该有效。我正在使用 Kotlin 1.4.0。
当我显式声明注释时,@field:JsonProperty("id")我可以使用LossDocument::class.java.declaredFields[1].annotations.
当您注释属性或主构造函数参数时,会从相应的 Kotlin 元素生成多个 Java 元素,因此生成的 Java 字节码中的注释有多个可能的位置。
如果您未指定使用站点目标,则根据正在使用的注释的 @Target 注释来选择目标。如果有多个适用目标,则使用以下列表中的第一个适用目标:param、property、field。--注释使用站点目标
在您的情况下,注释放置在构造函数参数上。
| 归档时间: |
|
| 查看次数: |
1145 次 |
| 最近记录: |