您好!欢迎来到爱源码

爱源码

热门搜索: 抖音快手短视频下载   

个人教育:如何认识和使用Java中的双冒号(::)运算符 《互站网》

  • 时间:2022-08-14 00:42 编辑: 来源: 阅读:295
  • 扫一扫,手机访问
摘要:个人教育:如何认识和使用Java中的双冒号(::)运算符 《互站网》
Java中的双冒号运算符是Java 8中编写Lambda表达式的方法之一。潘老师之前也写过一篇关于Lambda表达式的总结博文,大家可以在博客里搜索一下。让我们来看看应该如何理解和使用Java中的双冒号运算符。 1.定义和理解1。定义双冒号操作符是类方法的句柄,是lambda表达式的简写。这种简写的科学名称是eta-转换或η-转换 2.理解英文格式双冒号::,读作:双冒号。双冒号(::)操作符在Java 8中用作方法引用。方法引用是lambda表达式的一个重要特性。 它提供了执行方法的方法。因此,该方法引用需要由兼容的函数接口组成的目标类型上下文。 方法引用(方法引用描述——来自Oracle官网)你用lambda表达式创建匿名方法。然而,有时候,lambda表达式除了调用现有的方法之外什么也不做。在这些情况下,通过名称来引用现有方法通常更清楚。方法引用使您能够做到这一点;对于已经有名字的方法,它们是简洁易读的lambda表达式。大概意思是使用lambda表达式会创建匿名函数,但是有时候需要使用一个lambda表达式只调用一个已有的方法(没有别的),所以这就是方法引用!二。用法1。使用场景双冒号(::)一般有如下六种使用场景:2。详细案例讲解2.1)引用静态方法导入org . JUnit . test;导入Java . util . arrays;导入Java . util . list;公共类冒号{ @ Test public void Test(){ List & lt;字符串& gtlist = Arrays.asList("a "," b "," c ");//静态方法引用class name::method name list . foreach(冒号::print);//前一行相当于//list . foreach((x)->;colon . print(x));}//静态方法public static void print(strings){ system . out . println(s);}}2.2)引用具体对象实例方法导入org . JUnit . test;导入Java . util . arrays;导入Java . util . list;公共类冒号{ @ Test public void Test(){ List & lt;字符串& gtlist = Arrays.asList("a "," b "," c ");//实例方法引用instance ref::method name list . foreach(new colon()::print);//前一行相当于//list . foreach((x)->;新冒号()。print(x));}//实例方法public void print(strings){ system . out . println(s);}}2.3)引用任意特定类型对象的实例方法import org . JUnit . test;导入Java . util . arrays;public类冒号{ @ Test public void Test(){ String[]arr = { " Barbara "," James "," Mary "," John "," Patricia "," Robert "," Michael "," Linda " };//引用任何String类型对象的compareToIgnoreCase方法实现忽略大小写排序arrays.sort (arr,String::compare to ignore case);//前一行相当于//arrays.sort (arr,(a,b)->;a . comparetignorecase(b));//output for(string s:arr){ system . out . println(s);}}}注意:不要把它和引用静态方法混为一谈,想想为什么compareToIgnoreCase是一个非静态方法却可以用类名引用。两者根本不是一回事,双冒号前的类的含义也不同,即两个应用方向的运行结果如下:2.4)引用超类(父类)实例方法导入org . JUnit . test;导入Java . util . arrays;导入Java . util . list;公共类冒号扩展base Colon { @ Test public void Test(){ List & lt;字符串& gtlist = Arrays.asList("a "," b "," c ");//实例方法引用instance ref::method name list . foreach(super::print);}}class BaseColon{ //实例方法public void print(string s){ system . out . println(s);}}2.5)引用类构造方法一般我们需要公布接口,接口是对象的生成器,通过类名::new的方式实例化对象,然后调用方法返回对象。 //注意:这个类不需要实现接口公共类冒号{私有字符串名;)private int age//构造不带参数的公共冒号(){ }//构造带参数的公共冒号(string name,intage){ this . name = name;this.age =年龄;} public static void main(string[]args){//无参数构造引用colonno param CNP = Colon::new;冒号C1 = CNP . create colon();system . out . println(C1);//引用的构造引用了ColonWithParam cwp = Colon::new;冒号c2 = cwp.createColon("小明",20);system . out . println(C2);}//生成toString方法打印并查看@ override公共字符串toString(){ return " colon { "+" name = ' "+name+' \ '+",age = "+age+' } ';} }接口ColonNoParam{ //无参数方法提供对象Colon create Colon();}接口ColonWithParam{ //参数方法提供对象(数据类型要对应冒号参数构造函数)colon create colon (strings,int I);}运行结果可以看到如下:2.6)引用数组构造函数我们可以借助jdk自带的java.util.function.Function类来引用数组构造函数。 导入Java . util . function . function;公共类冒号{ public static void main(String[]args){ Function & lt;整数,冒号[]& gt;function =冒号[]::new;//调用apply方法创建数组,其中5为数组长度冒号[]arr = function . apply(5);//循环输出——最初全为null for(冒号C:arr){ system . out . println(C);}}}当然我们也可以用@FunctionalInterface自己设置函数接口:public class Colon { public static void main(string[]args){ myarray function < Integer,Colon[]& gt;function =冒号[]::new;//调用apply方法创建数组,其中5为数组长度冒号[]arr = function . apply(5);//循环输出——最初全为null for(冒号C:arr){ system . out . println(C);} } } }//设置自己的函数接口@ functional interface myarray function < A,T & gt{ T应用(A A);}三。总结以上是双冒号(::)运算符在Java中的用法,一定程度上简化了Java开发的冗余代码,但也增加了学习Java的难度。如果不能理解这种用法,最好不要用,以免出错!


  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【域名/主机/服务器|】qq邮箱提醒在哪里打开(2024-06-04 18:58)
【技术支持|常见问题】1556原创ng8文章搜索页面不齐(2024-05-01 14:43)
【技术支持|常见问题】1502企业站群-多域名跳转-多模板切换(2024-04-09 12:19)
【技术支持|常见问题】1126完美滑屏版视频只能显示10个(2024-03-29 13:37)
【技术支持|常见问题】响应式自适应代码(2024-03-24 14:23)
【技术支持|常见问题】1126完美滑屏版百度未授权使用地图api怎么办(2024-03-15 07:21)
【技术支持|常见问题】如何集成阿里通信短信接口(2024-02-19 21:48)
【技术支持|常见问题】算命网微信支付宝产品名称年份在哪修改?风水姻缘合婚配对_公司起名占卜八字算命算财运查吉凶源码(2024-01-07 12:27)
【域名/主机/服务器|】帝国CMS安装(2023-08-20 11:31)
【技术支持|常见问题】通过HTTPs测试Mozilla DNS {免费源码}(2022-11-04 10:37)

联系我们
Q Q:375457086
Q Q:526665408
电话:0755-84666665
微信:15999668636
联系客服
企业客服1 企业客服2 联系客服
86-755-84666665
手机版
手机版
扫一扫进手机版
返回顶部