On Thu, 2 Jun 2022 14:25:55 GMT, Daniel Fuchs <dfu...@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

Reply via email to