Создание конструктора в Java

215
06 февраля 2019, 00:10

Прошу помощи в понимании аспектов конструктора. Пример, у меня есть какой-то класс SomeClass и какой-то объект SomeObject, при инициализации нового экземпляра этого класса, я передаю в него выборочные данные из SomeObject, делаю new SomeClass(someObject.getId(), someObject.getSomeField(), ..., someObject.getAnotherField());

Вопрос в следующем: Можно-ли при инициализации передать в конструктор объект и сделать выборку полей внутри конструктора как показано в Варианте 2, если нельзя то почему и чем это черевато?

public class SomeClass {
    private Long someId;
    private String someField;
    .....
    private String anotherField;

конструктор вариант 1.

public SomeClass(Long id, String someField,..., String anotherField) {
    this.id = id;
    this.someField =  someField;
    ....
    this.anotherField = anotherField;
    }

конструктор вариант 2.

public SomeClass(SomeObject someObject) {
        this.id = someObject.getId();
        this.someField =  someObject.getSomeField();
        ....
        this.anotherField = someObject.getAnotherField();
        }
Answer 1

Ключевой вопрос в следующем: класс SomeClass предназначен исключительно для работы с экземплярами SomeObject или это некий абстрактный расчетный класс?

Приведу пример. Есть метод, вычисляющий объем параллелепипеда

int getVolume(int x1, int y1, int z1, int x2, int y2, int z2)

и есть объект класса Кирпич, где одними из параметров являются координаты кирпича

class Brick {
  ............
  int getX1() { .... }
  int getY1() { .... }
  int getZ1() { .... }
  int getX2() { .... }
  int getY2() { .... }
  int getZ2() { .... }
}

Вы можете, объявить метод, вычисляющий объем кирпича

int getVolume(Brick brick)

но тогда вы не сможете вычислить объем штабеля из кирпичей. Т.е. в данном случае, передавать объект не стоит и лучше передать набор параметров.

А вот если у вас метод вычисляет прочность кирпича, то тут лучше передать весь объект. Т.к. прочность можно считать только для кирпичей.

Но, для вычисления объема можно использовать интерфейс Параллелепипед. И передавать в метод экземпляр интерфейса. Тогда в метод можно передавать любой объект, поддерживающий этот интерфейс

READ ALSO
GraphView выпадает в null

GraphView выпадает в null

Есть код для добавления позиций в массив и вывода графика в GraphView:

174
чередование действий по клику мыши

чередование действий по клику мыши

Я пишу крестики нолики, и хочу сделать пока по простому - игру с другом, где ты кликаешь мышкой по клетке и у тебя появляется крестик, потом...

206
Ввод/вывод данных с клавиатуры с помощью case

Ввод/вывод данных с клавиатуры с помощью case

Дорогие программистыПо задумке моей программы пользователь вводит несколько строк, а потом программа их выводит на экран

197