Как очистить этот неоднозначный вызов от Arrays.copyof()?

Я запускаю AIDE на своем Android-телефоне, и мне трудно составить следующий бит кода Java:

elements = Arrays.copyOf(elements, elements.length * 2);

Здесь elements имеет тип int[]. Ошибка, которую я получаю от AIDE, -

Several methods are applicable to (int[], int): 'java.util.Arrays.copyOf(int[], int)' and 'java.util.Arrays.copyOf<T>(T[], int)'

Я бы ожидал, что компилятор будет выбирать прежний вариант, но это не так. Как я могу это решить?

Ответы

Ответ 1

Это проблема с компилятором /IDE. Однако Arrays.copyOf является довольно тривиальной функцией, поэтому просто напишите свою собственную версию, если проблема не может быть исправлена ​​с помощью обновлений IDE/компилятора. Другой способ - использовать отражение, чтобы называть его. Но это связано с некоторыми издержками времени исполнения, а также делает код неудобным, поэтому я предлагаю реализовать свою собственную версию.

Вот код:

public static int[] copyOf(int[] original, int newLength) {
    int[] copy = new int[newLength];
    System.arraycopy(original, 0, copy, 0,
                     Math.min(original.length, newLength));
    return copy;
}

Конечно, если вы затем получите ту же проблему для System.arraycopy, то это не сработает. Просто попробуйте. Если это не сработает, вы можете поместить его в класс-помощник и использовать компилятор без ошибок для компиляции этого вспомогательного класса.