当前位置: 首页 > news >正文

北京网站建设比较好的公司深圳专业网络推广

北京网站建设比较好的公司,深圳专业网络推广,国内有哪些顶尖的设计公司,wordpress技术论坛一、简介 方法引用是java8的新特性之一#xff0c; 可以直接引用已有Java类或对象的方法或构造器。方法引用与lambda表达式结合使用#xff0c;可以进一步简化代码。 来看一段简单代码#xff1a; public static void main(String[] args) {ListString strList Ar…一、简介 方法引用是java8的新特性之一 可以直接引用已有Java类或对象的方法或构造器。方法引用与lambda表达式结合使用可以进一步简化代码。 来看一段简单代码 public static void main(String[] args) {ListString strList Arrays.asList(new String[] { a, c, b });strList.stream().sorted((s1, s2) - s1.compareToIgnoreCase(s2)).forEach(s - System.out.println(s));}上述程序生成一个Stream流对流中的字符串进行排序并遍历打印。程序中采用lambda表达式的方式代替匿名类简化了代码然而代码中两处lambda表达式都仅仅调用的是一个已存在的方法String.compareToIgnoreCase、System.out.println这种情况可以用方法引用来简化 public static void main(String[] args) {ListString strList Arrays.asList(new String[] { a, c, b });strList.stream().sorted(String::compareToIgnoreCase).forEach(System.out::println);}对比一下可以看到上述程序分别采用了类的任意对象的实例方法引用和特定对象的实例方法引用两种方法引用形式下一章会讲述采用方法引用的方式可以简化lambda表达式的写法。 二、方法引用的具体使用 java8方法引用有四种形式 静态方法引用          ClassName :: staticMethodName构造器引用           ClassName :: new类的任意对象的实例方法引用   ClassName :: instanceMethodName特定对象的实例方法引用     object :: instanceMethodName lambda表达式可用方法引用代替的场景可以简要概括为lambda表达式的主体仅包含一个表达式且该表达式仅调用了一个已经存在的方法。方法引用的通用特性方法引用所使用方法的入参和返回值与lambda表达式实现的函数式接口的入参和返回值一致。 2.1 静态方法引用 静态方法引用的语法格式为 类名::静态方法名 如 System.out::println 等价于lambda表达式 s - System.out.println(s) 代码示例 public class Test {public static void main(String[] args){//lambda表达式使用Arrays.asList(new String[] {a, c, b}).stream().forEach(s - Test.println(s));//静态方法引用Arrays.asList(new String[] {a, c, b}).stream().forEach(Test::println);}public static void println(String s){System.out.println(s);} }静态方法引用适用于lambda表达式主体中仅仅调用了某个类的静态方法的情形。 2.2 构造器引用 构造器引用的语法格式为 类名::new 如() - new ArrayList() 等价于 ArrayList::new代码示例 SupplierListString supplier1 () - new ArrayListString();等价于 SupplierListString supplier ArrayListString::new;构造器引用适用于lambda表达式主体中仅仅调用了某个类的构造函数返回实例的场景。 2.3 类的任意对象的实例方法引用 类的任意对象的实例方法引用的语法格式为 类名::实例方法名 这种方法引用相对比较复杂我们来看示例 一、示例1 Arrays.sort(strs,(s1,s2)-s1.compareToIgnoreCase(s2));等价于 Arrays.sort(strs, String::compareToIgnoreCase);上述示例中strs为一个String数组lambda表达式(s1,s2)-s1.compareToIgnoreCase(s2)实现函数式接口的是Comparator接口, 我们看下jdk8中Comparator接口的源码截取部分 FunctionalInterfacepublic interface ComparatorT {int compare(T o1, T o2);}而String类的compareToIgnoreCase方法源码为 public int compareToIgnoreCase(String str) {return CASE_INSENSITIVE_ORDER.compare(this, str);}可以发现函数式接口Comparator的compare方法比String类的compareToIgnoreCase方法多了一个String类型的入参。看到这里对类的任意对象的实例方法引用的使用可能似懂非懂下面我们看一个自己实现一个类的任意对象的实例方法引用的示例示例2。 二、示例2 public class Student {private String name;private Integer score;public void setNameAndScore(String name, Integer score){this.name name;this.score score;System.out.println(Student name s score is score);}public static void main(String[] args){/*lambda表达式的用法TestInterface testInterface (student, name, score) - student.setNameAndScore(name, score);*///类的任意对象的实例方法引用的用法:TestInterface testInterface Student::setNameAndScore;testInterface.set(new Student(), DoubleBin, 100);}FunctionalInterfaceinterface TestInterface{// 注意入参比Student类的setNameAndScore方法多1个Student对象除第一个外其它入参类型一致public void set(Student d, String name, Integer score);} }看完上述代码我们可以总结出类的任意对象的实例方法引用的特性为 1、方法引用的通用特性方法引用所使用方法的入参和返回值与lambda表达式实现的函数式接口的入参和返回值一致 2、lambda表达式的第一个入参为实例方法的调用者后面的入参与实例方法的入参一致。 2.4 特定对象的实例方法引用 特定对象的实例方法引用的语法格式为 对象::实例方法名 示例代码 public class Test {public static void main(String[] args){Test test new Test();// lambda表达式使用Arrays.asList(new String[] {a, c, b}).stream().forEach(s - test.println(s));// 特定对象的实例方法引用Arrays.asList(new String[] {a, c, b}).stream().forEach(test::println);}public void println(String s){System.out.println(s);} }特定对象的实例方法引用适用于lambda表达式的主体中仅仅调用了某个对象的某个实例方法的场景。 三、总结 方法引用使用运算符::连接类(或对象)与方法名称(或new)实现在特定场景下lambda表达式的简化表示使用时要注意方法引用的使用场景及各种方法引用的特性。使用方法引用的好处是能够更进一步简化代码编写使代码更简洁。 然而作者认为方法引用代替lambda表达式对代码的简化程度远远没有lambda表达式代替匿名类的简化程度大 有时反而增加了代码的理解难度(如2.3节类的任意对象的实例方法引用)且使用场景的局限性不利于增加或修改代码个人认为有时没有必要刻意使用方法引用~ 【java8新特性】——lambda表达式与函数式接口详解一 【java8新特性】——Stream API详解二 【java8新特性】——Optional详解三 【java8新特性】——方法引用四 【java8新特性】——默认方法五
http://www.pierceye.com/news/382750/

相关文章:

  • 做vip电影网站黑龙江省中国建设银行网站首页
  • 长沙便宜网站建设在线印章生成器
  • 网站编辑的工作内容WordPress添加上传下载
  • 公司网站需求建设银行企业网站首页
  • 一般找素材都是做哪几个网站呢郑州seo外包阿亮
  • 广州个人网站建设公司jsp网站建设模板
  • 全国的网站建设网站建设肆金手指排名7
  • 做网站如何防止被抄袭17zwd一起做网站官网
  • 北京鲜花的网站建设做任务网站有哪些内容
  • 互联网营销网站建设印章在线生成
  • 厦门seo网站管理南宁广告网页设计人才招聘
  • 沂水住房与城乡建设局网站wordpress如何建立论坛
  • 贵州省文化旅游网站建设的必要性查网站流量的网址
  • 自己做的网站怎么传到空间啊平面设计技术培训机构
  • php 做网站xml地图回龙观手机网站开发服务
  • 四川建设工程网上合同备案网站如何重新打开wordpress
  • 免费个人网站模板下载qq邮箱企业邮箱注册
  • 泰兴市网站建设wp怎么打开wordpress
  • wordpress可以建哪些网站吗开发app需要多少人
  • 0基础学做网站什么做网站做个网站一般要多少钱啊
  • 外贸营销型网站建设多少钱wordpress付费浏览
  • 网站空间可以换吗进网站备案
  • 番禺建设网站开发软件工程专业介绍
  • 如何做网站定位网站建设报价新鸿儒
  • 商务网站建设包含了河北招投标公共服务平台
  • 高权重网站怎么发软文外贸平台app
  • nas服务器 做网站网页设计页面图片
  • 青海建设协会网站电子商务网站备案
  • 性价比高的广州网站建设不同用户入口的网站样板
  • 投资交易网站开发黑镜wordpress主题破解