Android中如何使用Lambda表示式高效開發

DylanAndroid發表於2016-12-27

轉載請註明出處:http://blog.csdn.net/linglongxin24/article/details/53888504
本文出自【DylanAndroid的部落格】


Android中如何使用Lambda表示式高效開發

當我們在Android開發中,使用Android Studio時,去寫一個執行緒或者button的點選事件時,寫完之後使用程式碼摺疊功能,可以看到如下預覽:

Android中如何使用Lambda表示式高效開發
摺疊程式碼

這個其實就是Lambda表示式的寫法。我們發現,對於我們開發來說,不會去關心這個類以及方法,只會關心這個方法內的程式碼,所以其他的多餘程式碼就顯得多餘了。那麼,到底具體如何使用呢?

一.在build.gradle中加入如下配置

 jackOptions{
            enabled true
        }
compileOptions{
   sourceCompatibility JavaVersion.VERSION_1_8
   targetCompatibility JavaVersion.VERSION_1_8
 }複製程式碼

Android中如何使用Lambda表示式高效開發
摺疊程式碼

#二.使用lambda表示式的三種寫法

1.第一種方式,無引數+語句(程式碼塊):適用於匿名內部類中方法無引數的情況
    /**
     * 第一種方式,無引數+語句(程式碼塊):適用於匿名內部類中方法無引數的情況
     * () -> 語句
     * 或
     * () -> {程式碼塊}
     **/
    private void threadTest() {
        /**普通寫法**/
        new Thread(new Runnable() {
            @Override
            public void run() {

            }
        }).start();
        /**使用lambda表示式寫法**/
        new Thread(() -> Log.d(TAG, "this is a lambda Thread")).start();
    }複製程式碼
2.第二種方式,有引數+語句:適用於匿名內部類中方法只有一個引數的情況
    /**
     * 第二種方式,有引數+語句:適用於匿名內部類中方法只有一個引數的情況
     * 方法引數 -> 語句
     * 或
     * 方法引數 -> {程式碼塊}
     */
    private void setOnClick() {
        /**普通寫法**/
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "this is a general onClick");
            }
        });
        /**使用lambda表示式寫法**/
        findViewById(R.id.button).setOnClickListener(v -> Log.d(TAG, "this is a lambda onClick"));
    }複製程式碼
3.第三種方式,有引數+程式碼塊:適用於匿名內部類中方法不止一個引數的情況
    /**
     * 第三種方式,有引數+程式碼塊:適用於匿名內部類中方法不止一個引數的情況
     * (引數1, 引數2) -> 語句
     * 或
     * (引數1, 引數2) -> {程式碼塊}
     */
    private void setOnChecked() {
        CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox);
        /**普通寫法**/
        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d(TAG, "this is a general onCheckedChanged");
            }
        });
        /**使用lambda表示式寫法**/
        checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
            Log.d(TAG, "this is a lambda onCheckedChanged");
            Log.d(TAG, "this is a lambda onCheckedChanged_isChecked=" + isChecked);
        });
    }複製程式碼

GitHub

相關文章