我不知道我问的问题是不是真的很愚蠢。但这是:
我想编写一个适用于特定类型的自定义注释。例如,如果我有一个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;
}
这可能吗?
答案 0 :(得分:11)
不可能。 @Target
使用ElementType[]
,而ElementType
是枚举,因此您无法对其进行修改。它不包含仅考虑特定字段类型的内容。
但是,您可以在运行时丢弃注释,或者引发有关它的运行时异常。
答案 1 :(得分:5)
在Java中不可能。
但如果要在运行时检查注释的正确性,您可以选择编写自己的annotation processor。
注释处理是编译过程中的一个钩子,用于分析 用户定义的注释和句柄的源代码(通过生成 编译器错误,编译器警告,发送源代码,字节代码 ..)。