RFR: 8287442: Reduce list to array conversions in java.lang.invoke.MethodHandles [v2]

Сергей Цыпанов duke at openjdk.java.net
Thu Jun 2 15:23:19 UTC 2022


On Thu, 2 Jun 2022 14:25:55 GMT, Daniel Fuchs <dfuchs at openjdk.org> wrote:

>> src/java.base/share/classes/java/lang/invoke/MethodHandles.java line 5462:
>> 
>>> 5460:         Objects.requireNonNull(target);
>>> 5461:         Objects.requireNonNull(newTypes);
>>> 5462:         return dropArgumentsToMatch(target, skip, newTypes.toArray(new Class<?>[0]).clone(), pos, false);
>> 
>> Do we really need to clone an array returned from `List.toArray()`? As far as I know from the JavaDoc of `List` if the passed array is not long enough to include all the items then the new array must be allocated. Here we always pass empty arrays, so the new ones are returned from `toArray()` method and we don't need `clone()`, right?
>
> The clone is needed - as the `List<Class<?>>` may be a custom implementation of List - so you cannot make any assumption on the concrete implementation of `toArray`.

But we can make an assumption on the behavior of particular method and the JavaDoc is clear about it. If a user passes an incorrect implementation of the `List` interface then it's their own responsibility.

-------------

PR: https://git.openjdk.java.net/jdk/pull/8923


More information about the core-libs-dev mailing list