学习笔记2:java 1.8 lamdba 表达式在android中的运用
来源:互联网 发布:rpg游戏源码 编辑:程序博客网 时间:2024/06/14 08:28
下面贴一段lamdba的简单运用代码
//传统的内部类 mTvTest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "lambda test", Toast.LENGTH_SHORT).show(); } }); //直接写方法的(对象类型 标识符) mTvTest.setOnClickListener((View v) -> { Toast.makeText(getApplicationContext(), "lambda test one ", Toast.LENGTH_SHORT).show(); }); //直接写方法的(标识符) mTvTest.setOnClickListener((v) -> { Toast.makeText(getApplicationContext(), "lambda test two ", Toast.LENGTH_SHORT).show(); }); //去掉大括号的写法(标识符) (前提只有一行代码可以这样写) mTvTest.setOnClickListener((v) -> Toast.makeText(getApplicationContext() , "lambda test three", Toast.LENGTH_SHORT).show());
lambda 替代 new 一个 内部类 的写法,是非常爽的,省代码,刚开始看可能不熟悉.慢慢习惯,非常简单!
下面再贴一段lamdba的简单运用代码
/** * 测试 lambda 访问局部变量 */ public void testLambda() { String logString = "I love coding !"; mTvTest.setOnClickListener((v) -> { Log.d(TAG, logString); Toast.makeText(getApplicationContext() , "lambda test four ", Toast.LENGTH_SHORT).show(); }); }
作用域:
与内部类相同:
1.在 lambda 表达式中访问 外层作用域 和老版本的 匿名对象 中的方式很相似。你可以直接访问标记了 final 的 外层局部变量,或者 实例的字段 以及 静态变量 。
与内部类不同:
2.对于局部的变量访问,可以不使用 final 修饰,这与内部类是不同的.
但是: 依然不能 在表达式中 重新 给局部变量 赋值 ,否则编译依然不通过.
3.在 内部类 中,可以调用接口的 defult 方法,但是在 lambda 表达式中,这是不可以的,如果调用,会引起 编译报错 .
阅读全文