gpt4 book ai didi

Java 覆盖注解的默认值

转载 作者:太空宇宙 更新时间:2023-11-04 12:58:34 26 4
gpt4 key购买 nike

我有一个在多个项目之间共享的 jar 库,该库的目的是将带注释的字段转换为 stringify API 响应。

public @interface MyField {
...
String dateFormat() default "dd/MM/yyyy";
...
}

使用它:

@MyField
private String myDate;

问题是当项目使用不同的日期格式(例如 yyyy/MMM/dd)时,我必须显式标记整个项目中的每个注释字段,如下例所示:

@MyField(dateFormat = "yyyy/MMM/dd")
private String myDiffDate;

到目前为止我已经尝试过:

  1. 无法扩展/实现注释

  2. 定义了一个常量字符串作为默认值,但除非该字符串被标记为“final”,否则它不会编译。

    String dateFormat() 默认 BooClass.MyConstant;

<小时/>

在这种情况下我有什么选择?

最佳答案

我尝试使用数组来操作注释的默认值,假设它的工作方式与通过引用存储值相同。但它不起作用,并且似乎在数组的情况下它返回一个克隆版本。尝试下面的代码...

运行时,您需要提供“test”作为参数 -

    import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

public class ManipulateAnnotationDefaultValue {

public static void main(String[] args) throws NoSuchFieldException, SecurityException {

String client = args.length > 0 ? args[0] : "default";
MyField annotation = DefaultMyField.class.getDeclaredField("format").getAnnotation(MyField.class);

String[] defaultValue = annotation.dateFormat();
System.out.println("Hash code of MyField.dateFormat = " + defaultValue.hashCode());
System.out.println("Value of MyField.dateFormat = " + defaultValue[0]);

if (!client.equals("default")) {
System.out.println("Changing value of MyField.dateFormat[0] to = 'dd-MM-yyyy'");
defaultValue[0] = "dd-MM-yyyy"; // change the default value of annotation //$NON-NLS-1$
}

defaultValue = annotation.dateFormat();
System.out.println("Hash code of MyField.dateFormat = " + defaultValue.hashCode());
System.out.println("Value of MyField.dateFormat = " + defaultValue[0]);
}
}

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface MyField {

String[] dateFormat() default {"dd/MM/yyyy"};
}

class DefaultMyField {

@MyField
String format;

}

下面是输出 -

Hash code of MyField.dateFormat = 356573597
Value of MyField.dateFormat = dd/MM/yyyy
Changing value of MyField.dateFormat[0] to = 'dd-MM-yyyy'
Hash code of MyField.dateFormat = 1735600054
Value of MyField.dateFormat = dd/MM/yyyy

关于Java 覆盖注解的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35144734/

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