[cdi-dev] Accepting class type for simple (qualifier) annotations in APIs?

Antoine Sabot-Durand antoine at sabot-durand.net
Thu Sep 15 05:21:41 EDT 2016


After some test I can answer myself. It’s bad because equals() is broken (2 annotations created with this code won’t be equals). And it works probably because all the equals call done in Weld are made from the inner Annotation not from user instance…

Also Annotation is not a functional interface.

Antoine

> Le 15 sept. 2016 à 11:03, Martin Kouba <mkouba at redhat.com> a écrit :
> 
> Dne 15.9.2016 v 10:48 Antoine Sabot-Durand napsal(a):
>> 
>>> Le 15 sept. 2016 à 10:26, Martin Kouba <mkouba at redhat.com> a écrit :
>>> 
>>> Dne 15.9.2016 v 10:15 Antoine Sabot-Durand napsal(a):
>>>> Just a naive remark regarding Instance of annotations without members. I already used a lambda to have such an instance:
>>>> 
>>>> BeanManager.getBeans(MyBean.class, () -> MyQualifier.class)
>>> 
>>> What is this cryptic unclear lambda thing doing actually? I know it compiles but I don't understand…
>> 
>> It compiles and works every the time I used it. From my understanding it’s a short cut for
>> 
>> BeanManager.getBeans(MyBean.class, new Annotation() {
>>    @Override
>>    public Class<? extends Annotation> annotationType() {
>>        return MyQualifier.class;
>>    }
>> })
>> 
>> Which by the way also works. From your answer I guess it’s a bad solution ;), but I’d be happy to know why and what is the side effect makes it work.
> 
> I don't say it's a bad solution, but it's not obvious and I consider similar things a bad practice, especially if we don't understand why it works ;-)
> 
>> 
>> Thanks,
>> 
>> Antoine
>> 
>>> 
>>>> 
>>>> I’m not sure there are no problem by using this short cut, but it is quite convenient.
>>>> 
>>>> Antoine
>>>> 
>>>> 
>>>>> Le 12 sept. 2016 à 12:28, arjan tijms <arjan.tijms at gmail.com> a écrit :
>>>>> 
>>>>> Hi,
>>>>> 
>>>>> Wouldn't it be convenient as the CDI API that now requires an Annotation instance in various APIs, would also accept the class type of that Annotation?
>>>>> 
>>>>> E.g. in BeanManager there's this method:
>>>>> 
>>>>> Set<Bean<?>> getBeans(Type beanType, Annotation... qualifiers)
>>>>> 
>>>>> This not rarely requires one to create an AnnotationLiteral, which is not specifically difficult but a tad verbose. For qualifiers that have no (binding) attributes, a simple Class would be much easier to use.
>>>>> 
>>>>> Thoughts?
>>>>> 
>>>>> Kind regards,
>>>>> Arjan Tijms
>>>>> _______________________________________________
>>>>> cdi-dev mailing list
>>>>> cdi-dev at lists.jboss.org
>>>>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>> 
>>>>> Note that for all code provided on this list, the provider licenses the code under the Apache License, Version 2 (http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas provided on this list, the provider waives all patent and other intellectual property rights inherent in such information.
>>>> 
>>>> 
>>>> _______________________________________________
>>>> cdi-dev mailing list
>>>> cdi-dev at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>> 
>>>> Note that for all code provided on this list, the provider licenses the code under the Apache License, Version 2 (http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas provided on this list, the provider waives all patent and other intellectual property rights inherent in such information.
>>>> 
>> 
> 
> -- 
> Martin Kouba
> Software Engineer
> Red Hat, Czech Republic

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/cdi-dev/attachments/20160915/e27b555b/attachment-0001.html 


More information about the cdi-dev mailing list