Android Lambda表达式

Android Lambda表达式

Lambda 希腊字母 “λ” 的英文名称,在java8中出现Lambda表达式,可以让代码更简洁,语法样式为:参数 -> 表达式; 为什么要去学习Lambda,因为在rxJava中有很多这样的表达式;在Android中有哪些应用场景比较合适呢。

应用场景

在使用过程中,不建议在自定义接口中使用,原因是因为Lambda常应用在只有一个方法的接口中。而我们自定义的接口,后期可能会增加接口中的方法,这样修改的地方就比较多,因为Lambda不支持多个方法的接口,AndroidStudio也并没有在多个实现方法时提示要使用Lambda; 所以Lambda在Android中的常用场景应该为:

  1. 点击事件:OnClick
  2. 新建线程:new Thread
  3. runOnUiThread

等等

eg:
常规操作

button.setOnClickListener(new View.OnClickListener(){
    @Override public void onClick(View v){
        doSomeWork();
    }
});

lambda

button.setOnClickListener( 
    (View v) -> {
        doSomeWork();
    }
);

Lambda 的操作

语法

( 参数列表... ) -> { 语句块... }

用自定义的接口当栗子

MainActivity


public class MainActivity extends AppCompatActivity {

    private final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 无参无返回值
        new Test(new Test.Callback() {
            @Override
            public void success() {
                Log.e(TAG, "无参无返回值");
            }
        });

        new Test(() -> Log.e(TAG, "无参无返回值"));


        // 有参无返回值
        new Test(new Test.Callback1() {
            @Override
            public void success(String msg) {
                Log.e(TAG, "有参无返回值");
            }
        });

        new Test((String msg) -> Log.e(TAG, "有参无返回值"));


        //无参有返回值
        new Test(new Test.Callback2() {
            @Override
            public String success() {
                return "无参有返回值";
            }
        });

        new Test(() -> "无参有返回值");


        //有参有返回值
        new Test(new Test.Callback3() {
            @Override
            public String success(String msg) {
                return msg + "的回调";
            }
        });

        new Test((String msg) -> msg + "的回调");
        
    }

}


Test

public class Test {

    private final String TAG = "Test";

    // 无参无返回值
    public Test(Callback callback) {
        callback.success();
    }

    public interface Callback {
        void success();
    }

    // 有参无返回值
    public Test(Callback1 callback) {
        callback.success("有参无返回值");
    }

    public interface Callback1 {
        void success(String msg);
    }


    //无参有返回值
    public Test(Callback2 callback) {
        String msg = callback.success();
        Log.e(TAG, msg);
    }

    public interface Callback2 {
        String success();
    }


    //有参有返回值
    public Test(Callback3 callback) {
        String msg = callback.success("有参有返回值");
        Log.e(TAG, msg);
    }

    public interface Callback3 {
        String success(String msg);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值