2013-02-12 83 views
1

我有一个使用注释的Java类。我想编写一个扩展它的版本并更改现有方法的注释。如何扩展Java类并更改注释?

所以会出现,有一个方法:

@myAnnotation(value=VALUE_THAT_CHANGE_IN_SUBCLASS) 
    myMethod(){ 
} 

子类将有几个新的方法,但大多只是更改标注在我说的方式。

+1

只是使用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

+2

扩展类,覆盖方法,使用新的注释。虽然我质疑逻辑,但这是实现它的唯一方法。 – 2013-02-12 20:39:08

+2

@JeffHawthorne指的是别的东西。它说注释本身不能被扩展,扩展类不能改变注释。 – Joe 2013-02-12 20:45:33

回答

4

虽然我不知道你为什么会想,你需要扩展类,重载的方法,并应用注释:

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(); 
    } 
} 

输出:

某些值
其他值

+1

这样的过程是否也可以应用于字段注释(或者我应该问一个新问题)? – Matthieu 2015-10-13 05:59:37