Альтернатива ключевого слова ref в Java

274
15 апреля 2022, 23:10

Нужно адаптировать метод из C# для Java. Как можно заменить ключевое слово ref в данной ситуации?

static void Change(int width, int height, int Xl, int Yl, int Xr, int Yr, ref int[,] aMatrix)
        {
            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    aMatrix[Xr + j, Yr + i] = aMatrix[Xl - j, Yl + (width - i) - 1];
                    
                }
            }
        }
Answer 1

в Java сложные объекты ( классы / массивы (примитивов) ) передаются всегда по ссылке. так что метод может выглядеть примерно так.

public class Test
{
    static void Change(int width, int height, int Xl, int Yl, int Xr, int Yr, int[][] aMatrix)
    {
        for (int i = 0; i < width; i++)
        {
            for (int j = 0; j < height; j++)
            {
                aMatrix[Xr + j][ Yr + i] = aMatrix[Xl - j][ Yl + (width - i) - 1];
            }
        }
    }
    public static void main(String[] args) {
        int[][] matrix = new int[][]{{1,2,3}, {3,4,5}, {4,5,6}};
        Change(2,2,1,1,1,1, matrix);
        for(int[] raw: matrix)
        for(int value: raw )
        System.out.println(value);
    }
}
Answer 2

Такой альтернативы нет в java. Но вам никто не запрещает возращать значения из функции. Собственно передавайте параметр и получайте результат из функции изменив, создав или ещё чего сделав со значениями. Ведь основная идея передачи ссылки это его изменение. Изменяйте и возвращайте в ответе, а его в свою очередь присваивайте.

READ ALSO
Как устроен static class

Как устроен static class

В интернете нашёл пример неправильного использования ThreadLocal переменной и внутренних классов

202
Как лучше всего вывести List &lt;Music&gt; list, где Music - это интерфейс?

Как лучше всего вывести List <Music> list, где Music - это интерфейс?

Есть класс MusicPlayer, у него есть поле List<Music> list , где Music - интерфейс с методом скажиСвоюПесню(), который реализуют три класса

204
Группировка RecyclerView Android

Группировка RecyclerView Android

Здрaвcтвуйте! Подскажите пожалуйста, как мне сгруппировать recyclerview? Цифры слева на фото -это семестрыХочу сгруппировать по семестрам

152
Java Comparator : possible lossy conversion from double to int

Java Comparator : possible lossy conversion from double to int

Нужно сравнить значения double c помощью ComparatorМой код:

249