Joe
Joe

Reputation: 8042

How do you extend a Java class and change annotations?

I have one Java class that uses annotations. I want to write a version that extends it and changes the annotations on existing methods.

So there will be a method that has:

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

The subclass will have a couple new methods, but will mostly just change annotations in the manner I said.

Upvotes: 2

Views: 8051

Answers (1)

Brian Roach
Brian Roach

Reputation: 76898

Though I'm not sure why you'd want to, you'd need to extend the class, override the methods, and apply the annotations:

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

Output:

Some value
Some other value

Upvotes: 4

Related Questions