Android中的鏈式呼叫
引例:
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle("this is a content title")
.setContentText("this is a content text")
.setWhen(System.currentTimeMillis())
.setSmallIcon (R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.build();
manager.notify(1, notification);
上述程式碼片段是 Android 中的 Notification 的基本用法。
現在忽略掉程式碼片段中的部分引數內容:
Notification notification = new NotificationCompat.Builder(this)
.setContentTitle(... )
.setContentText(...)
.setWhen(...)
.setSmallIcon(...)
.setLargeIcon(...)
.build();
其實這種語法技巧叫做鏈式呼叫,在本例中準確來說是鏈式呼叫方法鏈。
按照常規思路,Java 中呼叫方法的形式 .method()
那麼在語法中 .
的前面應該為一個物件,那麼我們開啟 SDK 原始碼中的 Notification 類:
/**
* Set the first line of text in the platform notification template.
*/
public Builder setContentTitle(CharSequence title) {
mN.extras.putCharSequence(EXTRA_TITLE, safeCharSequence(title));
return this;
}
/**
* Set the second line of text in the platform notification template.
*/
public Builder setContentText(CharSequence text) {
mN.extras.putCharSequence(EXTRA_TEXT, safeCharSequence(text));
return this;
}
我們會發現每個方法都返回了一個 this ,return this;
那麼問題就解決了,這個 this 代表著物件,所以說每一次呼叫方法都會返回物件,接著再呼叫另一個方法。
這種語法技巧在諸多的開源專案中均有用例,如 Glide,這種方式能夠使程式碼更有邏輯,同時使程式碼看起來更加簡潔,對於引例中的 Notification 類,進行調式呼叫來為其設定各種屬性,也能是程式碼看起來更加清晰緊湊。
簡單的例子:
1、一般形式
public class Test {
public static void main(String[] args) {
Person people = new Person();
people.setName("Harry Hacker");
people.setAge(22);
people.setSex("male");
}
}
class Person {
private String name;
private int age;
private String sex;
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
}
2、鏈式呼叫
public class Test {
public static void main(String[] args) {
Person people = new Person();
people.setName("Mario jesse")
.setAge(21)
.setSex("female");
}
}
class Person {
private String name;
private int age;
private String sex;
public Person setAge(int age) {
this.age = age;
return this;
}
public Person setName(String name) {
this.name = name;
return this;
}
public Person setSex(String sex) {
this.sex = sex;
return this;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public String getSex() {
return sex;
}
}
相關推薦
Android中的鏈式呼叫
引例: NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Notification notification = new
仿京東中購物車列表模組的實現【以及通過Builder的方式建立dialog彈窗 鏈式呼叫】
前段時間見群裡有個小夥伴,發了一張電商專案中比較常見的購物車列表的效果圖,問這樣的購物車列表如何實現?我們第一反應就是用ExpandableListView來實現,在上一篇部落格中我們詳細的分析了比較實用而且又炫酷的 RecyclerView的ItemDecor
setter方法實現鏈式呼叫(Android studio、Idea、WebStorm等JetBrains公司的產品)
本篇文章以Android studio為例,JetBrains公司的產品都是差不多的。1.新建一個類,新增屬性name和agepublic class abc { private String name; private int age; } 2.右
JavaScript中的鏈式呼叫
# 鏈模式 鏈模式是一種鏈式呼叫的方式,準確來說不屬於通常定義的設計模式範疇,但鏈式呼叫是一種非常有用的程式碼構建技巧。 ## 描述 鏈式呼叫在`JavaScript`語言中很常見,如`jQuery`、`Promise`等,都是使用的鏈式呼叫,當我們在呼叫同一物件多次其屬性或方法的時候,我們需要多次書寫物件
函式柯里化 - 函式鏈式呼叫 - lazyman
實現鏈式呼叫實現 add函式,add(1)(2)(3)(4)輸出10,然後考慮拓展性 // 解析為add(1)返回函式A,A(2)返回函式B, B(3)返回函式C function add(num) { var sum = 0; sum += num; ret
鏈式呼叫 小例項(附推導過程,關聯到 物件、 鏈式呼叫 、 函式執行 、 函式返回、形參實參、undefined)
var foo=function(m,n){ console.log(n); return{ foo:function(o){ console.log(o);
js省略物件名,寫完一個屬性,直接寫另一個 . 屬性名,這種語法糖叫 鏈式呼叫
正常寫法的程式碼(chart.lbl重複多次): chart.lbl = chart.renderer.label('You selected ' + selectedPoints.length + ' points', 100, 60); chart.lbl.attr({ paddin
Android中沉浸式狀態列,改變狀態列顏色類似QQ樣式
1、使用該功能需要使用到第三方庫SystemBarTint 下載地址:https://github.com/jgilfelt/SystemBarTint 2、需要在AndroidMainfest檔案中Application設定樣式 android:the
資料結構3----線性表中鏈式結構的其他幾種實現(霜之小刀)
歡迎轉載和引用,若有問題請聯絡 若有問題,請聯絡 Email : [email protected] QQ:2279557541 前言 鏈式結構除了上一篇結構中所講的單項鍊表外, 還有另外幾種。按照<大話資料結構>中所說 包括
鏈式呼叫原理
var testFn = function () {} testFn.prototype = { fn1: function () { console.log(this); console.log('fn1'); return this; }, fn2
關於js的 鏈式呼叫和流程控制 (sleep)
實現下面的函式: new Test("test").firstSleep(3).sleep(5).eat("dinner") //等待3秒 //test //等待5秒 //dinner 鏈式呼叫沒什麼可說的
Android 中使用RxJava呼叫onNext()方法後又呼叫onError()方法
android.content.res.Resources$NotFoundException: String resource ID #0x7d0 問題描述:專案中使用的是Rxjava1.0+和retrofit2.0+搭建的網路請求框架。有一個頁面獲取到網路資料後及Rxj
pyhton 鏈式呼叫
剛剛的被吃了重寫一遍 python—鏈式呼叫 class Chain(object): def __init__(self, path=''): self._path = path def __getattr__(self,
繼承(4)-名稱空間與鏈式呼叫
名稱空間 管理變數,防止汙染全域性,適用於模組化開發 var name = "bcd"; var init = (function (){ var name = "abc"; function callNa
關於iOS中鏈式程式設計
之前一直沒有使用Masonry,最近因為比較閒,就嘗試使用了下Masonry,但是Masonry這種和Objec-C大相庭徑的寫法,搞得我有點懵逼,於是今天簡單學習了一下鏈式程式設計。為了鞏固知識,於是有了這篇文章。不足之處希望大家不吝賜教。 在筆者的理解中
kotlin 複合函式 函式鏈式呼叫 以及偏函式
package kotlinall.chapter5 import java.io.OutputStream import java.nio.charset.Charset //複合函式 //求f(g(x))的值 val add5={i:Int->i+
JavaScript的封裝與鏈式呼叫
原生的JavaScript操作,不僅僅程式碼長,而且還不容易記憶和使用,採用對原生的JavaScript程式碼進行封裝,採用程式設計中主流的面向物件的思維,即在方法中儘量採用屬性式的操作(get/set操作),這樣我們不僅僅可以簡化程式碼操作量,更加容易記憶
時間日期格式化----鏈式呼叫
在java程式碼的編寫中規範程式碼很重要,有的人寫程式碼比較隨意,天馬行空,想到什麼就寫什麼,往往是一個大的邏輯下來就寫一個方法,亦或是寫少許幾個方法,這樣一來,為實現一些簡單的功能,不得不在一個方法中寫上幾十行甚至是幾百行,這樣,不僅僅程式碼邏輯不清晰還容
Retrofit+Rxjava實現巢狀邏輯的鏈式呼叫
最近做app有一個需求,service的某個介面(B介面)呼叫很慢,所以不能頻繁的呼叫,然後service就想了一個邏輯:先返回一個呼叫速度快的介面(A介面),裡面有一個欄位,一旦這個欄位發生了改變,再去呼叫第二個介面(B介面)。我們app這邊的邏輯也很簡單,先
java 鏈式呼叫
前言 現在很多開源庫或者程式碼都會使用鏈式呼叫。因為鏈式呼叫在很多時候,都可以使我們的程式碼更加簡潔易懂。以下 Student 類有多數個屬性,讓我們看看非鏈式呼叫和鏈式呼叫有何區別。 非鏈式呼叫 Main 類: /** * C