On Wed, 31 May 2023 03:43:25 GMT, Chen Liang <li...@openjdk.org> wrote:
>> test/jdk/java/lang/invoke/findVirtual/FindVirtualArrayCloneTest.java line 70: >> >>> 68: var cloneMh = MethodHandles.lookup() >>> 69: .findVirtual(String[].class, "clone", >>> MethodType.methodType(Object.class)); >>> 70: var mhClone = (String[]) (Object) >>> cloneMh.invokeExact((String[]) array); >> >> Suggestion: >> >> var mhClone = (String[]) cloneMh.invokeExact((String[]) array); > > the clone Method handle will have a type of `(String[])Object`, as > `findVirtual` for `clone` uses the Object return method type, and there is no > covariant override in array classes (which don't declare any methods) You're right. Alternatively (perhaps easier to read): - .findVirtual(String[].class, "clone", MethodType.methodType(Object.class)); - var mhClone = (String[]) (Object) cloneMh.invokeExact((String[]) array); + .findVirtual(String[].class, "clone", MethodType.methodType(Object.class)) + .asType(MethodType.methodType(String[].class, String[].class)); + var mhClone = (String[]) cloneMh.invokeExact((String[]) array); ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/13855#discussion_r1211064561