如何扩展Java类并更改注释?

时间:2013-02-12 20:09:15

标签: java inheritance annotations

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

所以会有一个方法:

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

子类将有几个新方法,但主要只是按我说的方式更改注释。

1 个答案:

答案 0 :(得分: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();
    }
}

输出:

  

有些价值   其他一些价值