Doc of MethodHandles.dropArguments.

Rémi Forax forax at univ-mlv.fr
Thu Jun 4 07:36:22 PDT 2009


The example provided in the doc of MethodHandles.dropArgument
seems to contains some mistakes:

MethodHandle cat = MethodHandles.lookup().
     findVirtual(String.class, "concat", String.class, String.class);
System.out.println(cat.<String>invoke("x", "y")); // xy
MethodHandle d0 = dropArguments(cat, 0, String.class);
System.out.println(d0.<String>invoke("x", "y", "z")); // xy

why 'xy' ?
drop 0 means remove the first argument, so the result is 'yz'.

MethodHandle d1 = dropArguments(cat, 1, String.class);
System.out.println(d1.<String>invoke("x", "y", "z")); // xz
MethodHandle d2 = dropArguments(cat, 2, String.class);
System.out.println(d2.<String>invoke("x", "y", "z")); // yz


why 'yz' ?
drop 2 means remove the third argument, here 'z'
so the correct answer is 'xy'

MethodHandle d12 = dropArguments(cat, 1, String.class, String.class);
System.out.println(d12.<String>invoke("w", "x", "y", "z")); // wz

cheers,
Rémi







More information about the mlvm-dev mailing list