1
我有一个使用注释的Java类。我想编写一个扩展它的版本并更改现有方法的注释。如何扩展Java类并更改注释?
所以会出现,有一个方法:
@myAnnotation(value=VALUE_THAT_CHANGE_IN_SUBCLASS)
myMethod(){
}
子类将有几个新的方法,但大多只是更改标注在我说的方式。
我有一个使用注释的Java类。我想编写一个扩展它的版本并更改现有方法的注释。如何扩展Java类并更改注释?
所以会出现,有一个方法:
@myAnnotation(value=VALUE_THAT_CHANGE_IN_SUBCLASS)
myMethod(){
}
子类将有几个新的方法,但大多只是更改标注在我说的方式。
虽然我不知道你为什么会想,你需要扩展类,重载的方法,并应用注释:
public class App
{
public static void main(String[] args) throws NoSuchMethodException
{
Class<MyClass> c = MyClass.class;
MyAnnotation a = c.getMethod("someMethod",null).getAnnotation(MyAnnotation.class);
System.out.println(a.name());
Class<MySubclass> c2 = MySubclass.class;
a = c2.getMethod("someMethod",null).getAnnotation(MyAnnotation.class);
System.out.println(a.name());
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface MyAnnotation {
String name() default "";
}
class MyClass {
@MyAnnotation(name="Some value")
public String someMethod() {
return "Hi!";
}
}
class MySubclass extends MyClass {
@Override
@MyAnnotation(name="Some other value")
public String someMethod() {
return super.someMethod();
}
}
输出:
某些值
其他值
这样的过程是否也可以应用于字段注释(或者我应该问一个新问题)? – Matthieu 2015-10-13 05:59:37
只是使用extends关键字来扩展您的类。一点研究表明,扩展注释是不可能的http://stackoverflow.com/questions/1624084/why-is-not-possible-to-extend-annotations-in-java http://www.cs.rice.edu /〜mgricken/research/xajavac/http://fusionsoft-online.com/en/java-annotations.html – 2013-02-12 20:21:52
扩展类,覆盖方法,使用新的注释。虽然我质疑逻辑,但这是实现它的唯一方法。 – 2013-02-12 20:39:08
@JeffHawthorne指的是别的东西。它说注释本身不能被扩展,扩展类不能改变注释。 – Joe 2013-02-12 20:45:33