Создание копирующего конструктора

511
04 февраля 2017, 08:23

Создаём копию другого прямоугольника (он и передаётся в параметрах):

public class Rectangle {
  private int left, top, width, height;
  Rectangle p;
  public Rectangle(int left, int top, int width, int height) {
    this.left = left;
    this.top = top;
    this.width = width;
    this.height = height;
  }
  public Rectangle(Rectangle p) {
    p.top = this.top;
    p.left = this.left;
    p.width = this.width;
    p.height = this.height;
  }
}

Почему передаются параметры из переменных главного класса? Разве они не остаются пустыми?

Answer 1

Способ клонирования объекта, который Вы хотите реализовать, будет выглядеть вот так:

public class Rectangle {
    private int left, top, width, height;
    public Rectangle(int left, int top, int width, int height) {
        this.left = left;
        this.top = top;
        this.width = width;
        this.height = height;
    }
    public Rectangle(Rectangle p) {
        this(p.left, p.top, p.width, p.height);
    }
}

Здесь в конструктор Rectangle(Rectangle p) передается объект Rectangle p, с данными которого вызывается конструктор Rectangle(int left, int top, int width, int height).

Answer 2

В этом случае может помочь метод java.lang.Object.clone(). Чтобы его использовать класс должен выглядеть так:

public class Rectangle implements Cloneable {
    private int left, top, width, height;
    public Rectangle(int left, int top, int width, int height) {
        this.left = left;
        this.top = top;
        this.width = width;
        this.height = height;
    }
    @Override
    public Rectangle clone() throws CloneNotSupportedException {
        return (Rectangle) super.clone();
    }
}

Тогда, чтобы получить копию, достаточно лишь вызвать метод:

 Rectangle r1 = new Rectangle(1, 2, 4, 5);
 Rectangle r2 = r1.clone();
READ ALSO
Настройка простого persistence.xml файла

Настройка простого persistence.xml файла

При настройке получаю ошибку , добавил скрин шот !

436
Структура классов в проекте java

Структура классов в проекте java

В Desktop Swing приложении есть класс Item в пакете Data, класс ItemFrame (графическое заполнение и редактирование класса Item) в пакете GUI и класс NetWorker в пакете...

414
Интерфейс не содержащий ни одного члена

Интерфейс не содержащий ни одного члена

Возможен ли интерфейс не содержащий ни одного члена и если да, какой практический смысл от такого интерфейса?

360
Java exit code -1073740791

Java exit code -1073740791

Столкнулся с проблемой, при компиляции приложения libgdx, приложение не открывает окно, а завершается с сообщением Process finished with exit code -1073740791 (0xC0000409)...

872