javareflectionannotations

How to create an instance of an annotation


I am trying to do some Java annotation magic. I must say I am still catching up on annotation tricks and that certain things are still not quite clear to me.

So... I have some annotated classes, methods and fields. I have a method, which uses reflection to run some checks on the classes and inject some values into a class. This all works fine.

However, I am now facing a case where I need an instance (so to say) of an annotation. So... annotations aren't like regular interfaces and you can't do an anonymous implementation of a class. I get it. I have looked around some posts here regarding similar problems, but I can't seem to be able to find the answer to what I am looking for.

I would basically like to get an instance of an annotation and be able to set some of it's fields using reflection (I suppose). Is there at all a way to do this?


Solution

  • Well, it's apparently nothing all that complicated. Really!

    As pointed out by a colleague, you can simply create an anonymous instance of the annotation (like any interface) like this:

    MyAnnotation:

    public @interface MyAnnotation
    {
    
        String foo();
    
    }
    

    Invoking code:

    class MyApp
    {
        MyAnnotation getInstanceOfAnnotation(final String foo)
        {
            MyAnnotation annotation = new MyAnnotation()
            {
                @Override
                public String foo()
                {
                    return foo;
                }
    
                @Override
                public Class<? extends Annotation> annotationType()
                {
                    return MyAnnotation.class;
                }
            };
    
            return annotation;
        }
    }
    

    Credits to Martin Grigorov.