I suspected that you already had looked into this, but it was worth a try. It would make everything so much easier.
Thanks for the explanation :-) On Tue, Aug 18, 2015 at 1:50 PM, Stephan Ewen <se...@apache.org> wrote: > Hi Kristoffer! > > I looked through the code as well. In fact, Flink currently uses the trick > mentioned for Serializable Lambdas in the gist you sent me. > > This works well for lambdas that return simple types (primitives or classes > without generics). The information for the generic parametrization is > unfortunately really erased, it is in no signature or anything. > > Java has the concept of "generic method signatures", which means that a > method gets a signature string that includes the generic types. These > signatures are generated for regular functions, but OpenJDK and OracleJDK do > not generate them for synthetic methods (like lambdas). > > We tried to submit a patch to OpenJDK to add these generic signatures to > lambda methods, but they did not like the fact that we try to figure out the > generic types of lambdas. I hope they change their minds at some point... > > Stephan > > > > > On Tue, Aug 18, 2015 at 11:46 AM, Aljoscha Krettek <aljos...@apache.org> > wrote: >> >> Unfortunately, this also doesn't work for the same reasons. The generic >> types of generic parameters of a lambda are not stored anywhere. Stephan >> mentioned to me that the only possibility right now would be to look at the >> code using something like ASM to find a cast in the code to the concrete >> type of the generic parameter. >> >> On Tue, 18 Aug 2015 at 11:35 Kristoffer Sjögren <sto...@gmail.com> wrote: >>> >>> How about https://github.com/jhalterman/typetools? >>> >>> On Tue, Aug 18, 2015 at 11:16 AM, Aljoscha Krettek <aljos...@apache.org> >>> wrote: >>> > Hi Kristoffer, >>> > I'm afraid not, but maybe Timo has some further information. In this >>> > extended example we can see the problem: >>> > https://gist.github.com/aljoscha/84cc363d13cf1dfe9364. The output is: >>> > >>> > Type is: class org.apache.flink.examples.java8.wordcount.TypeTest$Thing >>> > class org.apache.flink.examples.java8.wordcount.TypeTest$Thing >>> > Type is: class org.apache.flink.examples.java8.wordcount.TypeTest$Thing >>> > class org.apache.flink.examples.java8.wordcount.TypeTest$Thing >>> > Type is : >>> > >>> > org.apache.flink.examples.java8.wordcount.TypeTest.org.apache.flink.examples.java8.wordcount.TypeTest$Thing<java.lang.String> >>> > class org.apache.flink.examples.java8.wordcount.TypeTest$Thing >>> > >>> > So with the two lambda calls it does not correctly determine the >>> > generic >>> > parameter of Thing while it works with the anonymous class. >>> > >>> > I was exited when I saw the example because we've been trying for so >>> > long to >>> > get this to work. Maybe we have to wait for java 19 to get this to >>> > work. ;-) >>> > >>> > Thanks a lot for helping, though. :D >>> > Aljoscha >>> > >>> > On Tue, 18 Aug 2015 at 11:01 Kristoffer Sjögren <sto...@gmail.com> >>> > wrote: >>> >> >>> >> Hi >>> >> >>> >> Potential fix for writing flink jobs using lamdas without Eclipse JDT? >>> >> >>> >> https://gist.github.com/aslakhellesoy/3678beba60c109eacbe5 >>> >> >>> >> Cheers, >>> >> -Kristoffer > >