gpt4 book ai didi

java - 有没有办法静态访问注释中的默认值?

转载 作者:行者123 更新时间:2023-12-05 07:10:29 24 4
gpt4 key购买 nike

假设你有一些注解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/

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