Class<? extends Foo> bar() default null;
Như đã đề cập, đặc tả ngôn ngữ Java không cho phép giá trị null trong mặc định của chú thích.
Những gì tôi có xu hướng làm là xác định các DEFAULT_VALUE
hằng số ở đầu định nghĩa chú thích. Cái gì đó như:
public @interface MyAnnotation {
public static final String DEFAULT_PREFIX = "__class-name-here__ default";
...
public String prefix() default DEFAULT_PREFIX;
}
Sau đó, trong mã của tôi, tôi làm điều gì đó như:
if (myAnnotation.prefix().equals(MyAnnotation.DEFAULT_PREFIX)) { ... }
Trong trường hợp của bạn với một lớp, tôi chỉ định nghĩa một lớp đánh dấu. Thật không may, bạn không thể có một hằng số cho điều này, vì vậy thay vào đó, bạn cần phải làm điều gì đó như:
public @interface MyAnnotation {
public static Class<? extends Foo> DEFAULT_BAR = DefaultBar.class;
...
Class<? extends Foo> bar() default DEFAULT_BAR;
}
DefaultFoo
Lớp của bạn sẽ chỉ là một triển khai trống để mã có thể thực hiện:
if (myAnnotation.bar() == MyAnnotation.DEFAULT_BAR) { ... }
Hi vọng điêu nay co ich.
Class<? extends Foo> bar();
.