我正在探索注释,并且发现某些注释似乎在它们之间具有层次结构.
我正在使用注释在后台为卡片生成代码.存在不同的卡类型(因此不同的代码和注释)但是在它们之间存在某些共同的元素,如名称.
@Target(value = {ElementType.TYPE})
public @interface Move extends Page{
String method1();
String method2();
}
Run Code Online (Sandbox Code Playgroud)
这将是常见的注释:
@Target(value = {ElementType.TYPE})
public @interface Page{
String method3();
}
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我希望Move继承方法3但是我得到一个警告,说扩展对注释无效.我试图让Annotation扩展一个共同的基础,但这不起作用.这是可能的还是只是一个设计问题?
你会如何实现这个方法:
public boolean equal(Annotation a1, Annotation a2) {
...
}
Run Code Online (Sandbox Code Playgroud)
示例输入():
@First(name="1", value="1"), @Second(name="1", value="1")
@First(value="2"), @First(name="2")
@First(value="3"), @First(value="3")
@Second(name="4", value="4), @Second(name="4", value="4")
Run Code Online (Sandbox Code Playgroud)
样本输出:
false
false
true
true
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,预期的行为equal是明确的,类似于equalsjava中常规对象的标准方法的预期行为(问题是我们无法覆盖equals注释).
有没有libs或标准实现?
在Java中是否可以将注释值存储在常量字段(或类似字段)中,以便在需要的每个方法上重用它?例如,如果我有这个带注释的方法:
@CustomAnnotations({
@CustomAnnotation(..),
@CustomAnnotation(..),
@CustomAnnotation(..),
@CustomAnnotation(..),
...
@CustomAnnotation(..)
})
private static MyReturnValue doSomething(){
..
}
Run Code Online (Sandbox Code Playgroud)
我想向同一个类中的许多方法添加相同的注释,而不需要为每个方法剪切和粘贴它,是否可以定义一个字段,例如:
private static final Something annotationsConstant = {
@CustomAnnotation(..),
@CustomAnnotation(..),
@CustomAnnotation(..),
@CustomAnnotation(..),
...
@CustomAnnotation(..)
}
@CustomAnnotatins(annotationsConstant)
private static MyReturnValue doSomething(){
..
}
@CustomAnnotatins(annotationsConstant)
private static MyReturnValue anotherMethod(){
..
}
Run Code Online (Sandbox Code Playgroud)
如果是,包含注释的字段的数据类型是什么?如果没有,是否有另一种方法无需为每个方法重写相同的注释?