On 07/09/2011 12:21 PM, Rémi Forax wrote:
> You should avoid to create constants more than once.
> Also, bindTo() will create a method handle for-each call.
>
> You can transform your code like that:
>
> private static final MethodHandles.Lookup lookup =
> MethodHandles.lookup();
> private static final MethodType mt =
> MethodType.methodType(String.class, String.class);
>
> private static MethodHandle methodhandleLookup(Object receiver, String
> methodName) throws Throwable {
> return lookup.findVirtual(receiver.getClass(), methodName, mt);
> }
>
> private static String methodhandleInvoke(Object receiver, MethodHandle
> method) throws Throwable {
> return (String) method.invoke(receiver, "methodhandle");
> }
>
> or like that:
>
> private static final MethodHandles.Lookup lookup =
> MethodHandles.lookup();
> private static final MethodType mt =
> MethodType.methodType(String.class, String.class);
> private static final MethodType mt2 =
> MethodType.methodType(String.class, Object.class, String.class);
>
> private static MethodHandle methodhandleLookup(Object receiver, String
> methodName) throws Throwable {
> MethodHandle mh = lookup.findVirtual(receiver.getClass(),
> methodName, mt);
> return mh.asType(mt2);
> }
>
> private static String methodhandleInvoke(Object receiver, MethodHandle
> method) throws Throwable {
> return (String) method.bindTo(receiver).invokeExact(receiver,
> "methodhandle");
> }
oups, typo:
private static String methodhandleInvoke(Object receiver, MethodHandle
method) throws Throwable {
return (String) method.invokeExact(receiver, "methodhandle");
}
>
> Rémi
Rémi
_______________________________________________
mlvm-dev mailing list
[email protected]
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev