• java-Lambda表达式


    浏览以下内容前,请点击并阅读 声明

    Lambda表达式与匿名类的作用类似,当实现的接口仅有一个方法时,使用lambda表达式能够减少代码的使用量。

    //此处定义一个仅含有一个抽象方法的功能接口
        interface Intf{
          void meth(int var);      
        }
        //此处定义使用上述接口为参数的方法
        static void testIntf(Intf a){
        //...
        }
        //此处使用lambda方法创建一个实现上述接口的对象,并传递给上述方法为参数
        public static void main(String[] args){
       //1 lambda表达式
    //1 lambda表达式---------------------------- testIntf((int var)->{ //... });
      //-----------------------------------------
    //2 使用匿名类实现相同的功能------------------- testIntf(new Intf(){ public void meth(int var){ //... } });
      //-----------------------------------------
    }

      上述代码为使用lambda表达式的示例,相比较于匿名类,lambda表达式的代码量明显更少。

      lambda表达式的使用需要用到功能接口,功能接口是仅含有一个抽象方法的接口,当然可以有其他的默认方法和静态方法,JDK提供了许多内置的标准的功能接口,位于java.util.function包中。

    lambda表达式构成:

    • 一对圆括号,括号内是由逗号分隔开的参数,参数的类型可以省略,如果参数只有一个,则圆括号也可省略。
    • 一个由短横线和大于号组成的箭头 ->
    • 表达式主体,可以是表达式(有返回值)或者单个语句(无返回值),或者是一个代码句块(一对花括号内含java语句)。如果是单一的表达式,则计算后返回,也可以在代码块内使用return语句。

    lambda表达式变量的使用

      与局部类和匿名类相似,lambda表达式能够使用final修饰的局部变量和其所在类的成员。lambda表达式不能遮蔽,以为它并没有引入新的可视范围,其参数名称不能与其所在的可视范围内的变量冲突。

      方法引用

      lambda表达式中定义了方法,但这个方法只能用一次,我们可以在类中定义这样的方法,然后再对其进行引用。如下例所示:

    public class Cla{
    //此处定义一个仅含有一个抽象方法的功能接口
        interface Intf{
          void meth(int var);      
        }
        //此处定义使用上述接口为参数的方法
        static void testIntf(Intf a){
        //...
        }
        //此处使用lambda方法创建一个实现上述接口的对象,并传递给上述方法为参数
        public static void main(String[] args){
       //1 lambda表达式
       //1  lambda表达式
          testIntf((int var)->{
            //...  
          });
       //引用方法以达到同样的目的
        testIntf(Cla::implMeth);
    
    }
    //定义一个实现Intf接口中方法meth的方法
    static  void implMeth(int var){
      //...    
    }
    }

    可以看出,相对与lambda表达式,方法引用的代码量更小了,不同的方法类型引用方法如下:

    种类方法
    引用静态方法 包含该方法的类名称::方法名称
    引用一个特定对象的实例方法 包含该方法的对象::实例方法名称
    引用任意类型的对象的实例方法 包含该方法的类型::方法名称
    引用构造器 类名称::new关键词
  • 相关阅读:
    pr 打印函数
    list to tree(记录集转换为树结构)
    iOS 中计时器的使用心得
    iOS动画开发----打分 数字滚动刷新动画
    iOS动画开发----粒子系统---彩带效果
    Touch Up Inside not working with UISlider
    Xcode警告:Automatic Preferred Max Layout Width is not available on iOS versions prior to 8.0
    iOS评论App----常用时间的处理
    获取文件/文件系统属性的方法----attributesOfItemAtPath:和attributesOfFileSystemForPath:
    NSInvocation错误
  • 原文地址:https://www.cnblogs.com/justforcon/p/6038391.html
Copyright © 2020-2023  润新知