Отвечая на несколько вопросов здесь ранее и из некоторых работ, которые я делал в последнее время, я задавался вопросом, почему Java не поддерживает цепочку методов в своих встроенных классах.
Если бы я должен был создать класс Car
, например, я мог бы сделать его цепным путем повторного использования this
вместо void следующим образом:
public class Car {
private String make;
public Car setMake(String make) {
this.make = make;
return this;
}
}
Есть ли какая-то особая причина, почему встроенные библиотеки не склонны так поступать? Есть ли недостаток в цепочке методов?
Возможно, я пропустил что-то, что объясняло бы отсутствие цепочки методов, однако любой метод setter, который возвращает void по умолчанию, должен возвращать ссылку на это (по крайней мере, в моих глазах). Это сделает ситуации, подобные следующим гораздо более чистым.
container.add((new JLabel("label text")).setMaximumSize(new Dimension(100,200)));
а не более длинный: Примечание. Это не помешает вам кодировать этот путь, если вы пожелаете.
JLabel label = new JLabel("label text");
label.setMaximumSize(new Dimension(100,200));
container.add(label);
Мне было бы очень интересно услышать причины, лежащие в основе этого решения. Если бы я должен был догадаться, что это связано с накладными расходами, связанными с этим, и поэтому их следует использовать только тогда, когда это необходимо.