Sie können keine Instanz erstellen, aber zumindest die Standardwerte abrufen
Settings.class.getMethod("a").getDefaultValue()
Settings.class.getMethod("b").getDefaultValue()
Settings.class.getMethod("c").getDefaultValue()
Und dann könnte ein dynamischer Proxy verwendet werden, um die Standardwerte zurückzugeben. Das ist, soweit ich weiß, die Art und Weise, wie Annotationen auch von Java selbst gehandhabt werden.
class Defaults implements InvocationHandler {
public static <A extends Annotation> A of(Class<A> annotation) {
return (A) Proxy.newProxyInstance(annotation.getClassLoader(),
new Class[] {annotation}, new Defaults());
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
return method.getDefaultValue();
}
}
Settings s = Defaults.of(Settings.class);
System.out.printf("%s\n%s\n%s\n", s.a(), s.b(), s.c());