Android开发技巧 (五) —— Lambda表达式

Lambda表达式本质是一种匿名方法,它既没有方法名,也没有访问修饰符和返回值类型,用它来写代码更简洁,更易懂。

Lambda是Java8的新特性,所以要在app/build.gardle中添加:

android {
......
    compileOptions{
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

之后就可以使用Lambda表达式了,像下面这样两种方法相同:

        new Thread(new Runnable() {
            @Override
            public void run() {
                // 具体逻辑
            }
        }).start();
        
        new Thread(() -> {
            // 具体逻辑
        }).start();

为啥可以有这么精简的写法呢?这是因为Thread类的构造函数接收的参数是一个Runnable接口,并且该接口中只有一个待实现的方法:

@FunctionalInterface
public interface Runnable {
    /**
     * When an object implementing interface <code>Runnable</code> is used
     * to create a thread, starting the thread causes the object's
     * <code>run</code> method to be called in that separately executing
     * thread.
     * <p>
     * The general contract of the method <code>run</code> is that it may
     * take any action whatsoever.
     *
     * @see     java.lang.Thread#run()
     */
    public abstract void run();
}

像是这种只有一个待实现方法的接口,都可用Lambda表达式的写法。
了解了这种基本写法骂我们接着尝试自定义一个接口。然后用Lambda表达式的方式实现,新建一个MyListener接口,代码如下所示:

public interface MyListener{
	String doSomething(String a, int b);
}

那么就可以这么实现它:

MyListener listener = (String a, int b) -> {
	String result = a + b;
	return result;
};

而且 Java 能自动推断出Lambda表达式的参数类型,所以还能这么写:

MyListener listener = (a, b) -> {
	return a + b;
}

再举个具体的例子,比方说现在有一个方法是接收MyListener参数:

public void hello(MyListener listener){
	String a = "Hello Lamba";
	int b = 1024;
	String result  = listener.dosomething(a, b);
	Log.d(TAG, result);
}

在调用hello()就能这么写:

hello((a, b) -> {
	String result = a + b;
	return result;
});

那么在Android中哪些方法能替换呢?
按钮点击事件
原来:

Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
	@Override
	public void onClick(View v){
		// 处理点击事件
	}
));

Lambda简化:

Button button = findViewById(R.id.button);
button.setOnClickListener(v -> {
	// 处理点击事件
});

搞定!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值