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)