- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设你有一些注解Annot
:
@Retention(/*your retention policy*/)
@Target(/*targeted element type*/)
public @interface Annot {
String value() default "Hello World!";
}
在一些相关的代码中,比如注解处理器,你需要 value()
注解字段的默认值 without 无法访问被注解的类使用 @Annot
。当然你可以简单地做
public static final String ANNOT_VALUE_DEFAULT = "Hello World!";
在您的处理器类中,然后在 @Annot
中更改以下内容:
String value() default Processor.ANNOT_VALUE_DEFAULT;
(Processor
是您的注解处理器的类名)。虽然这适用于 String
,但是当您的 value()
类型是 enum
时,@Annot
中的更改失败>。对于其他值,它也可能会失败,但 enum
是我用例的一部分,因此,如果这不起作用,其他类型是否会起作用也没关系。
现在,当然,解决这个问题的最简单方法是简单地在 @Annot
和 Processor
中分别指定默认值.但是每个程序员都知道重复常量通常不是一个好主意。您可能希望自动将一个部分(例如 @Annot
)的更改反射(reflect)到其他部分(例如 Processor
)。为此,您必须能够执行以下操作:
var defaultVal = Annot.value(); // statically (without an instance annotated with @Annot) access default value
那么,这种静态访问是否可行?
我现在并不急于找到解决方案,因为我已经找到了一个半方便的解决方法(请参阅我的回答)。尽管如此,由于解决方法有点“hacky”,我想知道是否有更优雅的方法来做到这一点。
最佳答案
如果事实证明对此没有令人满意的解决方案,但您(读者)确实需要解决方案,请查看此解决方法:
因此,问题是您想要访问默认值而不 提供一个用@Annot
注释的类。好吧,谁说您无权上这样的课?只需将这个(最好是包私有(private)的)类添加到您的源代码中:
@Annot
class DefaultAnnotValues {
private static final Annot ANNOT = DefaultAnnotValue.class.getAnnotation(Annot.class);
static SomeEnum value = ANNOT.value();
// add all other enum fields with default values here
private DefaultAnnotValues() {
}
}
现在您可以访问注释的所有默认值,并且当您更改注释定义中的默认值时,它将自动反射(reflect)到您使用这些默认值的任何地方。
关于java - 有没有办法静态访问注释中的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61211706/
我是一名优秀的程序员,十分优秀!