Hi all,

so in earlier mails to this list I described a bit the problems I got into with the way Groovy produces proxies and handles default methods for those.

I would like to see how the correct solution to this is supposed to be....

so we have code like m.sortReversed{a,b -> a.value <=> b.value}, where sortReversed is getting a Comperator and will call reversed() on it. This is not actual API, this is just an example! So far the logic has been, that kind of lambda {a,b -> a.value <=> b.value}, is called for every non-default, non-static method. If we are talking about functional interfaces, there is only one such method. The problem now arises what we are supposed to do if a default method is called.

Dynamic proxies and invocation handlers won't do the job, as they do not provide an implementation of the interface I can call the default method on.

Which means I have to use LambdaMetaFactory or maybe MethodHandleProxies. This may solve the problem...

A second usage is for a kind of mocking. which means we have either a map of lambdas, or a lambda which can accept any kind of argument constellation...and now multiple non-static, non-default methods to proxy. We did use dynamic proxies for that in the past. I do not see how that can work with either of the three.

So runtime generated classes is the only option left? Including all the problems with class loaders....

bye Jochen


Reply via email to