java自定义注释:将属性设置为可选

java自定义注释:将属性设置为可选,java,annotations,metaprogramming,Java,Annotations,Metaprogramming,我定义了自己的自定义注释 @Target(value={ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface MyCustomAnnotation { Class<?> myType(); } @Target(值={ElementType.METHOD,ElementType.FIELD}) @保留(RetentionPolicy.RUNT

我定义了自己的自定义注释

@Target(value={ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation  {
    Class<?> myType();
}
@Target(值={ElementType.METHOD,ElementType.FIELD})
@保留(RetentionPolicy.RUNTIME)
public@interface MyCustomAnnotation{
类myType();
}
如果有的话,我如何使属性成为可选的

您可以为属性:

@Target(value={ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation  {
    Class<?> myType() default Object.class;
}
@Target(值={ElementType.METHOD,ElementType.FIELD})
@保留(RetentionPolicy.RUNTIME)
public@interface MyCustomAnnotation{
类myType()默认对象.Class;
}

找到了它。它不能是可选的,但可以这样声明默认值:

@Target(value={ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation  {
    Class<?> myType() default String.class;
}
@Target(值={ElementType.METHOD,ElementType.FIELD})
@保留(RetentionPolicy.RUNTIME)
public@interface MyCustomAnnotation{
类myType()默认字符串.Class;
}

如果没有默认值可以理解为“空”值,那么这就是一个问题。

对于可选属性,您需要为该属性提供默认值,您可以使用“default”关键字提供默认值

注意:对于一个属性,您只能将属性名称用作值。 如果将属性名称用作,则可以像这样直接传递值@MyCustomAnnotation(true),而不是@MyCustomAnnotation(myType=true)


在您之前找到,但我认为选择您的answer@flybywire你们怎么能说你们在丹之前找到了它,你们在15:18回答,而他在15:17回答?也许丹打字更快:-)链接断了。这是合适的替代品吗?供其他向注释传递字符串数组的人参考。默认情况下,我可以使用<代码> String []命名空间()默认{{} /代码>来传递一个空数组。如果需要缺省类,并且可能实际上需要String.class作为值,则考虑使用java. UTI.VoID.Car(因为您不能以任何其他方式实例化或真正使用它),谢谢;我不知道如果未提供“default”,则必须声明该属性:)