Когда вы передаете arr1
, вы передаете копию указателя массива.Внутри метода вы работаете с этой копией указателя , а не с оригинальным указателем , полученным из внешнего метода.Когда вы присваиваете значение arr1
, вы назначаете его копии, а не оригиналу, оригинал все еще указывает на другой массив.
public static<T> T[] paste(T[] arr1, int place, T[] arr2) {
// your code here
return temp;
}
Если вы не хотите изменять подписьметод, который является правильной вещью.Но если мы предположим, что по какой-то причине вы не хотите этого делать.Затем вам нужно изменить фактический массив, который передается в качестве аргумента.В вашем конкретном примере вы не можете сделать это, потому что ни arr1, ни arr2 не имеют адекватного размера.Но это был бы путь к более процедурному типу решения.
Пример процедуры, которая изменяет свой аргумент:
public void mutationProcedure(int array[],int position, int changeToValue) {
array[position] = changeToValue;
}
В этом коде, если мы вызываем его извнезначение массива будет изменено.
ОБНОВЛЕНИЕ: Решение без необходимости явного приведения.Я считаю, что это лучшее решение.
public static<T> T[] paste(T[] arr1, int place, T[] arr2) {
T[] temp = Arrays.copyOf(arr1, arr1.length + arr2.length);
System.arraycopy(arr2, 0, temp, place, arr2.length);
return temp;
}
Сначала мы создадим новый массив, начинающийся с arr1, а размер равен обоим массивам.Затем мы копируем второй массив с позиции конца array1 до конца.Так как класс Arrays работает с обобщениями, нам не нужно явно приводить.