1. 程式人生 > >Android中的鏈式呼叫

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

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