[resteasy-dev] Lambda question

Ron Sigal rsigal at redhat.com
Mon Apr 3 13:11:38 EDT 2017


This question arises in https://issues.jboss.org/browse/RESTEASY-1209 
"org.jboss.resteasy.util.Types#getActualTypeArgumentsOfAnInterface not 
working for lambda's." The reporter wants to do this:


> ResteasyProviderFactory factory = new ResteasyProviderFactory();
> factory.register((ContextResolver<String>) type -> "foo bar");

but it doesn't work. I find that if I do this:

>           ContextResolver<String> resolver1 = new 
> ContextResolver<String>() {
>
>              @Override
>              public String getContext(Class<?> type)
>              {
>                 return null;
>              }
>            };
>            for (Type type : resolver1.getClass().getGenericInterfaces())
>            {
>               System.out.println(type);
>            }

I get

> javax.ws.rs.ext.ContextResolver<java.lang.String>

but if I do

>            ContextResolver<String> resolver2 = type -> "foo";
>            for (Type type : resolver2.getClass().getGenericInterfaces())
>            {
>               System.out.println(type);
>            }

I get

> interface javax.ws.rs.ext.ContextResolver

Same with

>            ContextResolver<String> resolver2 = 
> ((ContextResolver<String>)type -> "foo");

So, it seems that, for lambdas, Java doesn't keep the implementation 
type and value of the type variable at run time. Does anyone have any 
ideas or tricks?

Thanks,
Ron




-- 
My company's smarter than your company (unless you work for Red Hat)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/resteasy-dev/attachments/20170403/b7c9ceee/attachment.html 


More information about the resteasy-dev mailing list