17

我不知道我问的问题是否真的很愚蠢。但这里是:

我想编写一个应该适用于特定类型的自定义注释。例如,如果我有一个类 A,那么我想要一个可以应用于 A 对象的注释。

像这样的东西:

@Target({ElementType.FIELD, //WHAT_ELSE_HERE_?})
public @interface MyAnnotation {
   String attribute1();
}

public class X {
   @MyAnnotation (attribute1="...") //SHOULDN'T BE POSSIBLE
   String str;
   @MyAnnotation (attribute1="..") //PERFECTLY VALID
   A aObj1;
   @MyAnnotation (attribute1="...") //SHOULDN'T BE POSSIBLE
   B bObj1;
}

这有可能吗?

4

2 回答 2

13

不可能。@Target使用ElementType[], 并且ElementType是一个枚举,所以你不能修改它。它不包含仅针对特定字段类型的考虑。

但是,您可以在运行时丢弃注释,或引发关于它的运行时异常。

于 2013-09-06T10:00:41.600 回答
7

这在 Java 中是不可能的。

但是,如果您想在运行前检查注释的正确性,您可以选择编写自己的注释处理器。

注释处理是编译过程中的一个钩子,用于分析源代码以获取用户定义的注释并进行处理(通过产生编译器错误、编译器警告、发出源代码、字节码......)。

注释处理的基础教程

于 2013-09-06T10:00:50.883 回答