JDK8系列之Method References教程和示例

举报
yd_273762914 发表于 2021/07/14 23:42:53 2021/07/14
【摘要】 JDK8系列之方法引用教程和示例 在上一章的学习中,我们学习了JDK8的lambada表达式,接着,本章节继续学习jdk8的方法引用 1、什么是jdk8方法引用 方法引用,英文Method References,jdk8中的方法引用通过方法的名字来指向一个方法,语法是使用一对冒号 ::,方法引用可以使语言的构造更紧凑简洁,减少冗余代码 2、方法引用的分类 方法...

JDK8系列之方法引用教程和示例

在上一章的学习中,我们学习了JDK8的lambada表达式,接着,本章节继续学习jdk8的方法引用

1、什么是jdk8方法引用

方法引用,英文Method References,jdk8中的方法引用通过方法的名字来指向一个方法,语法是使用一对冒号 ::,方法引用可以使语言的构造更紧凑简洁,减少冗余代码

2、方法引用的分类

方法引用的使用有如下几种:

  • 类的静态方法引用,类名::静态方法名
    语法:ClassName :: staticMethodName
  • 特定对象的实例方法引用,对象::实例方法名
    语法:object :: instanceMethodName
  • 类的任意对象的实例方法引用,类名::实例方法名
    语法:ClassName :: instanceMethodName
  • 构造器引用,类名::new(构造方法的引用)
    语法:ClassName :: new

3、类的静态方法引用

import java.util.function.BiFunction;
public class MethodReferenceExample { public MethodReferenceExample() { } public static void main(String[] args) { // example 1:引用类的静态方法 BiFunction<Integer , Integer , Integer> add = MethodReferenceExample::add; int pr1 = add.apply(5 , 20); System.out.println(String.format("两个数相加的和:%s" , pr1)); } public static int add(int a , int b) { return a + b; }
}



  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

4、类的任意对象的实例方法引用

import java.util.Arrays;
public class MethodReferenceExample { public MethodReferenceExample() { } public static void main(String[] args) { // example 2:引用类的实例方法 String[] strs = {"Apple", "Banana" , "Apricot","Cumquat", "Grape", "Lemon","Loquat","Mango"}; Arrays.sort(strs , String::compareToIgnoreCase); Arrays.asList(strs).forEach(str -> {System.out.println(String.format("水果名称:%s", str));}); }
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

5、特定对象的实例方法引用

public class MethodReferenceExample { public MethodReferenceExample() { } public static void main(String[] args) { // example 3:引用对象的实例方法 MethodReferenceExample example = new MethodReferenceExample(); MyFunctionalInterface functionalInterface = example::echo; functionalInterface.display(); } public void echo() { System.out.println("hello world"); }
}

@FunctionalInterface
interface MyFunctionalInterface{ void display();
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

6、对构造函数的方法引用

public class MethodReferenceExample { public MethodReferenceExample() { } public MethodReferenceExample(String msg) { System.out.println(String.format("参数打印:%s" , msg)); } public static void main(String[] args) { // example 4:构造方法的引用 MyInterface myInterface = MethodReferenceExample::new; myInterface.display("Method reference to a constructor"); }
}
@FunctionalInterface
interface MyInterface{ void display(String msg);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

附录:参考资料

文章来源: smilenicky.blog.csdn.net,作者:smileNicky,版权归原作者所有,如需转载,请联系作者。

原文链接:smilenicky.blog.csdn.net/article/details/118681552

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。