[External] : Re: Method and Field Literals

arjan tijms arjan.tijms at gmail.com
Wed Apr 20 23:17:23 UTC 2022


Hi,

One of the main use cases is for referring to methods in a typesafe way.

E.g. in Jakarta Persistence (previously JPA), one now has to either use a
string to reference a method, or generate a meta model that effectively
fakes method reference (technically JavaBean property references):

Root<Student> root = criteriaQuery.from(Student.class);
criteriaQuery.select(root).where(cb.equal(root.get(Student_.gradYear),
2015));

This is not ideal. Generating the meta model is such a hassle that it's
often not done. Much nicer would be a method literal syntax of some kind,
so we can do:

Root<Student> root = criteriaQuery.from(Student.class);
criteriaQuery.select(root).where(cb.equal(root.get(Student#gradYear.method
), 2015));

Another example that came up lately is in method handlers, for instance
here one for a dynamic proxy implementing multiple interfaces:

public static class LambdaHandler implements InvocationHandler {

        private ELContext elContext;
        private LambdaExpression lambdaExpression;

        @Override
        public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
           if (method.getDeclaringClass().equals(BiConsumer.class) &&
               method.getName().equals("accept") {

           }
        }

The declaring class can be checked for in a type-safe way, but for the
method a String needs to be used.

Kind regards,
Arjan Tijms


On Wed, Apr 20, 2022 at 6:30 PM Brian Goetz <brian.goetz at oracle.com> wrote:

>
> > It's again a couple of years later, is there already any desire to
> > pursue the method and field literals topic?
>
> The term "method and field literals" is somewhat overloaded, so let's be
> more specific: what do you expect the _type_ of a method literal is?  Is
> it just jlr.Method?  Or is MethodHandle / VarHandle also part of the
> story?   Is the goal simply to get earlier error checking that you
> specified a method that exists (errors at compile time vs run time)? Or
> to just have syntactic sugar for the reflective call?  Or somehow an
> expectation that the lookup can be more efficient, such as LDC
> MethodHandle + MH.unreflect?
>
>
>
>
>


More information about the discuss mailing list