I think as we can only do this for annotations in our control, it's less appealing, as we then end up with both patterns in use.
On 10 Jul 2013, at 12:23, Hugh Nguyen <[email protected]> wrote: > Hi fellow developers, > > Instead of creating a whole separate class SomeAnnotationLiteteral and put > it in some separate .literal package, do you think we should embed the > literal inside the annotation class itself? > > For example: > > > @Qualifier > @Target({ FIELD, PARAMETER }) > @Retention(RUNTIME) > public @interface RenderResponse { > > @SuppressWarnings("serial") > public static final AnnotationLiteral<RenderResponse> LITERAL = new > AnnotationLiteral<RenderResponse>() { > }; > } > > > And when you use this literal as RenderResponse.LITERAL, you even have it > highlighted properly as an annotation by the IDE. > > > For cases where the annotation has attributes, we could declare it like > this: > > > @Qualifier > @Target({ FIELD, PARAMETER }) > @Retention(RUNTIME) > public @interface View { > String value() default ""; > > // need to suppress "all" to remove warning about implementing an > Annotation. > @SuppressWarnings("all") > public static class LITERAL extends AnnotationLiteral<View> implements > View { > private String value = ""; > > @Override > public String value() { > return this.value; > } > > public Literal(final String value) { > if (value != null) { > this.value = value; > } > } > } > } > > > And we use it as: new View.LITERAL("someViewId"). This is also highlighted > by the IDE. > > > Of course this is only applicable for those Annotation that's in our > control. > > What do you think? > > > -- > Regards, > Hugh
