Any reason why we require
if (!(getClass().getSuperclass() == AnnotationLiteral.class))
{
throw new RuntimeException(
"Not a direct subclass of AnnotationLiteral");
}
this stops me using annotation literals as an anonymous inner class
AFACIT (as you can't use implement when defining one).