Как правильно передать массив в качестве параметра в конструкторе копирования класса (Java OOP) - PullRequest
0 голосов
/ 31 марта 2019

Я хочу передать строковый массив в качестве параметра в конструкторе копирования класса.Я хочу знать, какой из этих способов является правильным / обычным способом в объектно-ориентированном Java-программировании:

-Копирование массива внутри конструктора копирования -Копирование массива внутри метода "getArray" объекта, являющегося объектомскопировано с -Both of вышеупомянутого

Моя цель - скопировать массив по значениям, а не по ссылке, чтобы сохранить инкапсуляцию.

    String[] apps;

    // First version
    public Smartphone(Smartphone p)
    {
        this.apps = Arrays.copyOf(p.getApps(), p.getApps().length);
    }
    public String[] getApps()
    {
        return apps;
    }

    // Second version
    public Smartphone(Smartphone p)
    {
        this.apps = p.getApps();
    }
    public String[] getApps()
    {
        return Arrays.copyOf(apps, apps.length);
    }

    // Third version
    public Smartphone(Smartphone p)
    {
        this.apps = Arrays.copyOf(p.getApps(), p.getApps().length);
    }
    public String[] getApps()
    {
        return Arrays.copyOf(apps, apps.length);
    } 

Ответы [ 2 ]

1 голос
/ 05 июня 2019

Вторая версия верна.Конструктор вызывает p.getApps(), который возвращает скопированный массив.

Третья версия будет копировать массив два раза.Это не нужно.

0 голосов
/ 31 марта 2019

Объекты передаются по ссылке в Java, например. String, Integer, Float и т. Д. Только примитивные типы передаются по значению, например int, long, float, double, char и т. д.

Вы можете делать то, что делаете, или использовать;

System.arraycopy (Object src, int srcPos, Объект Dest, int destPos, Int длина) больше информации: https://docs.oracle.com/javase/7/docs/api/java/lang/System.html

...