Ищете краткую реализацию конструктора копирования (Java) - PullRequest
0 голосов
/ 27 февраля 2019

Для 2 переменных операторы можно записать в блок конструктора копирования.Но для ситуации, в которой есть несколько переменных, кто-нибудь может мне помочь, зная, как можно достичь подобного результата?Я использую this, но это оказалось последней переменной.

class Obj
{
    int a, b;

    Obj(int a, int b)
    {this.a = a; this.b =b;}

    Obj(Obj obj1)
    //trying to copy every variable by concise logic here
    //instead of writing for each and every variable
    {a = obj1.a; b = obj1.b;} 
}

class CopyObj2 
{
    public static void main(String[] args) 
    {
        Obj obj1 = new Obj(5,10);
        System.out.println("Obj1\t"+obj1.a+", "+obj1.b);
        Obj obj2 = new Obj(obj1);
        System.out.println("Obj2\t"+obj2.a+", "+obj2.b);
    }
} 

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Конструктор копирования используется в java-средах AWT, таких как Point, Rectangle, Polygon и другие геометрические классы.Обычно там, где много объектов.

Не требуется конструктор копирования для неизменных классов с полями final.

Опыт работы с изменяемыми классами позволяет мне посоветоватьпереход к неизменным классам.С помощью конструкторов копирования получается много копирования или обмена внутренними данными (например, массивами или списками).Стиль кода не такой приятный.

Для полноты:

  • Существует также клонирование Object.clone() в качестве альтернативыв конструктор copy , но он постепенно теряет популярность из-за своих накладных расходов.

  • Затем существует сериализация для копирования тоже, который все еще активно используется, но не должен использоваться здесь.

0 голосов
/ 27 февраля 2019

Нет собственного способа сделать это - единственный способ назначить значения полей вручную, как вы это сделали.

В качестве помощника - вы можете попробовать использовать Orika -Инфраструктура отображения bean-компонентов Java (работает, если ваши классы являются bean-компонентами).

Я пытался использовать это, но оно оказалось окончательной переменной.

this - это ссылка на ваш объект.Вы не можете присвоить ему другое значение - это просто не имеет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...