gpt4 book ai didi

groovy - 如果注释包含闭包字段,则使用注释字段实现特征的类会丢失特征字段上的注释

转载 作者:行者123 更新时间:2023-12-04 17:46:43 24 4
gpt4 key购买 nike

#!/usr/bin/env groovy
import java.lang.annotation.Retention
import java.lang.annotation.RetentionPolicy

@Retention(RetentionPolicy.RUNTIME)
@interface AnnotationWithClosure {
Class closure() default { true }
}

trait TraitWithAnnotatedField {
@AnnotationWithClosure(closure = {})
String foo
@AnnotationWithClosure()
String bar
}

class Main implements TraitWithAnnotatedField {
def printFields() {
this.class.declaredFields.each {
println "${it} is annotated ${it.isAnnotationPresent(AnnotationWithClosure.class)}"
}
}
}

new Main().printFields()

当我执行此脚本时,在控制台中我看到以下内容:

私有(private) java.lang.String Main.TraitWithAnnotatedField__bar 注释:true
private java.lang.String Main.TraitWithAnnotatedField__foo 注释为:false

有人可以解释这种行为吗?如何正确地从特征字段中获取带有闭包的注释并在 groovy 中处理它们?

$ groovy -version
Groovy Version: 2.4.12 JVM: 1.8.0_144 Vendor: Azul Systems, Inc. OS: Linux

最佳答案

遗憾的是,这是 Groovy 的默认行为。

不过,使用 @CompileStatic 注释您的特征可以解决问题。

关于groovy - 如果注释包含闭包字段,则使用注释字段实现特征的类会丢失特征字段上的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48166942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com