1.什么是鏈式調用?
Person person = new Person().setName(fog) .setAge(18) .setSex(man) .setJob(software engineer);
2.優勢和好處
有以上的代碼,好處顯而易見:代碼量大幅度減少,邏輯集中清晰明了,且易於查看和修改。
3.背后的實現原理
一般而言,我們在設置set,get的方法的時候,在對應的方法里都是返回的void。
從某種意義上來說,代碼的返回值是一個必須要執行的步驟,直接返回void是一種浪費,而我們實現鏈式調用的關鍵步驟和原理就是這個返回值的不同。
public class Person { private String name; private String sex; private String job; private int age; public Person setJob(String job) { this.job = job; return this; } public Person setName(String name) { this.name = name; return this; } public Person setSex(String sex) { this.sex = sex; return this; } public Person setAge(int age) { this.age = age; return this; } }
解析:
開始的那一串鏈式設置屬性的實現代碼,正是上面的形式。
對比而言,就是返回值的不同,一個是void,一個是this。
而實現連釋電用的邏輯就是:
1.對於第一個設置屬性的方法而言,新建一個對象的時候,正常的調用其方法,如果這個方法返回的是this,意味着將這個設置過屬性的對象返回
2.那么對於第二個方法而言,是一個設置方法返回的是已經設置過屬性的對象,而這個返回的對象也是有對應的屬性設置方法的,這樣一來,就相當於對一個創建的對象調用其屬性設置方法,並且將這個對象返回
3.以此類推,上一個方法返回對象,是下一個調用方法的執行對象,依次執行下去,就成了鏈式調用方法