How do I get a MethodHandle
for an array constructor of type int[]::new
?
This does not work:
public static void main(String[] args) throws Throwable { MethodHandles.Lookup lookup = MethodHandles.publicLookup(); MethodHandle mh = lookup.findConstructor(int[].class, MethodType.methodType(void.class, int.class)); System.out.println(mh); System.out.println(mh.invoke()); }
The result is the following:
Exception in thread "main" java.lang.NoSuchMethodException: no such constructor: [I.<init>(int)void/newInvokeSpecial at java.lang.invoke.MemberName.makeAccessException(MemberName.java:871) at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:990) at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1382) at java.lang.invoke.MethodHandles$Lookup.findConstructor(MethodHandles.java:920) at xx.main(xx.java:11) Caused by: java.lang.NoSuchMethodError: java.lang.Object.<init>(I)V at java.lang.invoke.MethodHandleNatives.resolve(Native Method) at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:962) at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:987) ... 3 more
And it does not:
public static void main(String[] args) throws Throwable { MethodHandles.Lookup lookup = MethodHandles.publicLookup(); MethodHandle mh = lookup.findConstructor(int[].class, MethodType.methodType(void.class)); System.out.println(mh); System.out.println(mh.invoke()); }
It seems that instead of the constructor, instead of Object
, <
:
MethodHandle()Object java.lang.Object@36baf30c
source share