class PersonMethodChaining {
private String name;
private int age;
// In addition to having the side-effect of setting the attributes in question,
// the setters return "this" (the current Person object) to allow for further chained method calls.
public PersonMethodChaining setName(String name) {
this.name = name;
return this;
}
public PersonMethodChaining setAge(int age) {
this.age = age;
return this;
}
public void introduce() {
System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
}
// Usage:
public static void main(String[] args) {
PersonMethodChaining person = new PersonMethodChaining();
// Output: Hello, my name is Peter and I am 21 years old.
person.setName("Peter").setAge(21).introduce();
}
}
Без метода цепочки
class Person {
private String name;
private int age;
// Per normal Java style, the setters return void.
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void introduce() {
System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
}
// Usage:
public static void main(String[] args) {
Person person = new Person();
// Not using chaining; longer than the chained version above.
// Output: Hello, my name is Peter and I am 21 years old.
person.setName("Peter");
person.setAge(21);
person.introduce();
}
}
Цепочка методов, , также известная как идиома параметра , является общим синтаксисом для вызова нескольких вызовов методов в объектно-ориентированных языках программирования. Каждый метод возвращает объект, позволяя объединить вызовы в один оператор. Цепочка - это синтаксический сахар, который устраняет необходимость в промежуточных переменных. Цепочка методов также известна как крушение поезда из-за увеличения числа методов, которые следуют один за другим в одной и той же строке, что происходит, когда большее число методов объединяется в цепочку, даже если между методами часто добавляются разрывы строк.
Аналогичный синтаксис: каскадирование методов , где после вызова метода выражение вычисляется для текущего объекта, а не для возвращаемого значения метода. Каскадирование может быть реализовано с использованием цепочки методов, когда метод возвращает сам текущий объект (this). Каскадирование является ключевым методом в свободно распространяемых интерфейсах, и поскольку цепочка широко реализована в объектно-ориентированных языках, а каскадирование - нет, эту форму «каскадирования по цепочке путем возврата этого» часто называют просто «цепочкой». И цепочка, и каскадирование происходят от языка Smalltalk.