gpt4 book ai didi

java - 为Annotation中的Annotation type属性提供类似于 'NO_VALUE'的默认值

转载 作者:行者123 更新时间:2023-11-30 11:20:16 25 4
gpt4 key购买 nike

我有两个注释。第一个从第二个开始使用:

@Target({ })
@Retention(RUNTIME)
public @interface A {

String value() default "";

}

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface B {

A a() default ???;

}

@B 可以在没有任何属性的情况下使用的逻辑,但是,当然,这并不意味着(根据注释规范)它的属性将具有空值。

从另一边 @A.value() == "" 也符合我的逻辑。这意味着:

A a() default @A;

不适合我。

所以,我需要一个案例,当我可以确定 @B.a() 类似于“NO_VALUE”并且应该保护它不受最终用户影响时。

static final A NO_A = new A() {};

A a() default NO_A;

没有帮助:它没有被编译。

作为解决方法,我使用了一个数组:

A[] a() default {};

然后在注释处理器中检查a 属性的大小。

是否有一些其他选项可以使用默认值标记 a() 以使其类似于“NULL”并摆脱数组样式?

最佳答案

似乎没有任何干净的方法来为注释字段创建默认空值。以下是使用类类型时采用这种方式设计的原因和解决方法的一些信息:Error setting a default null value for an annotation's field

我认为像您建议的那样使用数组是处理此问题的好方法。出于技术原因,只需记录它是一个数组,并在与多个元素一起使用时抛出错误。

我想到的唯一其他解决方案是使用魔术字符串作为默认 A 的值。根据用例,我会选择一些不太可能被任何用户使用的长随机字符串,或者记录使用的任何其他特殊值。

public @interface B {
final String DEFAULT = "_a_default_value";
A a() default @A(DEFAULT);
}

关于java - 为Annotation中的Annotation type属性提供类似于 'NO_VALUE'的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22830224/

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