[weld-dev] Odd type assignability test

Matej Novotny manovotn at redhat.com
Mon Apr 27 08:26:51 EDT 2020


Forwarding this email to weld-dev to make it public


So, the Foo<String> is the required parameterized type here and Foo<E> is parameterized bean type.

And from CDI spec[1]:
> A parameterized bean type is considered assignable to a parameterized required type if they have identical raw type and for each parameter:
> * the required type parameter is an actual type, the bean type parameter is a type variable and the actual type is assignable to the upper bound, if any, of the type variable, or

Isn't that the same case? Or am I just running low on caffeine? :)

Matej

_________________________________________________________________________________
[1] https://docs.jboss.org/cdi/spec/2.0/cdi-spec.html#assignable_parameters

----- Original Message -----
> From: "Laird Nelson" <ljnelson at gmail.com>
> To: "Matej Novotny" <manovotn at redhat.com>
> Sent: Sunday, April 26, 2020 10:52:57 PM
> Subject: Odd type assignability test
> 
> Hello; I ran across this test during some code reading to better understand
> type assignability.  It's in BeanTypeAssignabilityTest.java:
> 
> @Test
> public <E> void testStringFooMatchesVariableFoo() throws Exception {
>     Type stringFooType = new TypeLiteral<Foo<String>>() {
>     }.getType();
>     Type variableFooType = new TypeLiteral<Foo<E>>() {
>     }.getType();
>     Assert.assertTrue("Foo<String> should match Foo<E>",
> getRules().matches(stringFooType, variableFooType));
> }
> 
> Am I reading this right?  Is this saying that a reference of type
> Foo<String> should be able to receive a Foo<E>, where E doesn't extend
> String?
> 
> I understand that any method that declares a type variable E and returns a
> Foo<E> will happen to produce a compatible reference.  That is:
> 
> public <E> Foo<E> blatz() { /* ... */ }
> 
> can be called like this:
> 
> final Foo<String> foo = blatz(); // should work; E's upper bounds will be
> String here
> 
> But in this test, E has no upper bounds, so how does it work?
> 
> Thanks,
> Laird
> 


More information about the weld-dev mailing list