Метод клонирования Java

1

Я пытаюсь создать метод clone, который возьмет уже созданный Rational и сделает копию, чтобы в моем основном я мог сделать что-то вроде этого:

Rational r3 = new Rational(r1);

До сих пор я создал метод в моем классе Rational, который будет принимать рациональное значение как параметр; однако я не уверен, как сделать новый экземпляр похожим на параметр.

public Rational copy(Rational aRational) {
int newNum = aRational.n;
 int newDenom = aRational.d;
 return (new Rational(newNum, newDenom));

}

Любая помощь или понимание очень ценятся!

  • 1
    Это выглядит очень хорошо для меня. Что-то не работает?
  • 0
    «Я не уверен, как сделать новый экземпляр похожим на параметр» <- а?
Показать ещё 2 комментария
Теги:
class
copy-constructor
rational-numbers

1 ответ

3
Лучший ответ

в моем основном я [хочу] сделать что-то вроде этого: Rational r3 = new Rational(r1);

Это не клонирование, это делает конструктор, который принимает Rational как параметр. Вы можете сделать это следующим образом:

public Rational(Rational other) {
    n = other.n;
    d = other.d;
}

Это позволит использовать код для создания новых экземпляров Rational из существующих экземпляров.

Примечание. Похоже, что n и d в вашем классе подвергаются пользователям вашего класса как общедоступные переменные. Это не идеально, потому что у вас нет контроля над изменениями, которые пользователи вашего класса могут выполнять с его переменными экземпляра. Лучший подход заключается в том, чтобы сделать их private, и добавить геттеры и сеттеры в ваш класс. Такой подход позволит вам обнаружить попытки установить знаменатель на ноль, что может быть желательным.

  • 1
    Этот код работает, даже если n и d являются частными.
  • 0
    @ Абсурд-Разум Абсолютно, это так. Моя точка зрения заключалась в том, что OP не должен делать n и d приватными, чтобы контролировать процесс их установки, а не делать его конструктором. Я отредактировал ответ, чтобы сделать эту заметку отдельным пунктом.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню