Недавно я увидел некоторый код (amazon hasoop code), который использует этот тип синтаксиса
Foo bar = new Foo().setX(10).setY(11);
Я думал, что это было мило, поэтому я решил уйти. мои функции setX()
возвращали Foo
вместо void
и ставили return this;
во всех них. это сработало хорошо. пока я не попробовал его с наследованием, что привело к некоторым результатам задержек.
Я приведу конкретный пример: у меня есть два класса, Location
класс, который имеет два поля: x и y. и другой класс Location3D
, который наследует от Location
и добавляет третье поле z.
все поля используют метод, описанный выше для своих сеттеров.
теперь я хочу создать новый экземпляр location3D и установить его поля, что происходит,
new Location3D().setZ(7).setY(6).setX(5)
работает
new Location3D().setX(7).setY(6).setZ(5)
нет.
не работает Я имею в виду, что то, что возвращается из setY(6)
, является объектом Location
, а не объектом Location3D
и поэтому не имеет метода setZ()
!
после этого длинного ввода мой вопрос: может ли эта форма "стрингеров сеттера" работать с наследованием, не заставляя вызывающего объекта бросать объекты? если да, то как?
Кроме того, я уверен, что для этого лучше использовать термин "setter stringing", что это такое?