Java Lambda表达式的方法引用和构造器引用实例分析
本文实例讲述了JavaLambda表达式的方法引用和构造器引用。分享给大家供大家参考,具体如下:
一点睛
如果Lambda表达式的代码块只有一条代码,还可以在代码块中使用方法引用和构造器引用,以使得Lambda表达式更加简洁。
种类 示例 说明 对应的Lambda表达式 引用类方法 类名::类方法 函数式接口中被实现方法的全部参数传给该类方法作为参数。 (a,b,...)->类名.类方法(a,b,...) 引用特定对象的实例方法 特定对象::实例方法 函数式接口中被实现方法的全部参数传给该方法作为参数。 (a,b,...)->特定对象.实例方法(a,b,...) 引用某类对象的实例方法 类名::实例方法 函数式接口中被实现方法的第一个参数作为调用者,后面的参数全部传给该方法作为参数。 (a,b,...)->a.实例方法(b,...) 引用构造器 类名::new 函数式接口中被实现方法的全部参数传给该构造器作为参数。 (a,b,...)->new类名(a,b,...)
二实战
1代码
importjavax.swing.*; @FunctionalInterface interfaceConverter{ Integerconvert(Stringfrom); } @FunctionalInterface interfaceMyTest { Stringtest(Stringa,intb,intc); } @FunctionalInterface interfaceYourTest { JFramewin(Stringtitle); } publicclassMethodRefer { publicstaticvoidmain(String[]args) { //下面代码使用Lambda表达式创建Converter对象 //Converterconverter1=from->Integer.valueOf(from); //方法引用代替Lambda表达式:引用类方法。 //函数式接口中被实现方法的全部参数传给该类方法作为参数。 Converterconverter1=Integer::valueOf; Integerval=converter1.convert("99"); System.out.println(val);//输出整数99 //下面代码使用Lambda表达式创建Converter对象 //Converterconverter2=from->"fkit.org".indexOf(from); //方法引用代替Lambda表达式:引用特定对象的实例方法。 //函数式接口中被实现方法的全部参数传给该方法作为参数。 Converterconverter2="fkit.org"::indexOf; Integervalue=converter2.convert("it"); System.out.println(value);//输出2 //下面代码使用Lambda表达式创建MyTest对象 //MyTestmt=(a,b,c)->a.substring(b,c); //方法引用代替Lambda表达式:引用某类对象的实例方法。 //函数式接口中被实现方法的第一个参数作为调用者, //后面的参数全部传给该方法作为参数。 MyTestmt=String::substring; Stringstr=mt.test("JavaILoveyou",2,9); System.out.println(str);//输出:vaILo //下面代码使用Lambda表达式创建YourTest对象 //YourTestyt=(Stringa)->newJFrame(a); //构造器引用代替Lambda表达式。 //函数式接口中被实现方法的全部参数传给该构造器作为参数。 YourTestyt=JFrame::new; JFramejf=yt.win("我的窗口"); System.out.println(jf); } }
2运行
99
2
vaILo
javax.swing.JFrame[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout,title=我的窗口,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,0,0,0x0,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。