文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java8中的方法与构造器怎么引用

2023-07-05 06:14

关注

这篇“Java8中的方法与构造器怎么引用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java8中的方法与构造器怎么引用”文章吧。

什么是方法引用

当要传递给 Lambda 体的操作,已经有实现的方法了,可以使用方法引用!

方法引用可以看做是 Lambda 表达式深层次的表达。换句话说,方法引用就是 Lambda 表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是 Lambda 表达式的一个语法糖。

要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致!

格式:使用操作符"::"将类(或对象)与方法名分隔开来。

有如下三种主要使用情况:

方法引用的三种情况案例

情况一:对象::实例方法名

public static void main(String[] args) {        // 情况一:对象::实例方法名        // Consumer 中的 void accept(T t)        // void accept(T t) 与 打印流中的void println(T t) 参数类型和返回值一致,因此可以用方法引用        // Lambda 表达式        Consumer<String> con1 = str -> System.out.println(str);        con1.accept("aniu1");        // 方法引用改写        PrintStream ps = System.out;  //对象::实例方法名        Consumer<String> con2 = ps::println;        con2.accept("aniu2");    }

Java8中的方法与构造器怎么引用

情况二:类::静态方法名

// 情况二:类::静态方法  // Comparator 中的 int compare(T t1,T t2)  // int compare(T t1,T t2) 与 Integer中的int compare(T t1,T t2) 参数类型和返回值一致,因此可以用方法引用  // Lambda 表达式  Comparator<Integer> com3 = (t1,t2) -> Integer.compare(t1,t2);  System.out.println(com3.compare(12, 21));  // 方法引用改写  Comparator<Integer> com4 = Integer::compare;  System.out.println(com4.compare(12, 21));

情况三:类::实例方法名

// 情况三:类::实例方法名 (有难度)---前面方法引用的要求针对的是情况一和情况二,对情况三不适用  // Comparator 中的 int compare(T t1,T t2)  // String 中的 int t1.compareTo(t2) // T t1 作为compareTo的调用者,T的类型作为 类::实例方法名 中的类  // Lambda 表达式  Comparator<String> com5 = (s1,s2) -> s1.compareTo(s2);  System.out.println(com5.compare("A", "B"));  // 方法引用改写  Comparator<String> com6 = String::compareTo;  System.out.println(com6.compare("A", "B"));

这一块还是比较抽象的,多去理解,我不在多举例子!

构造器引用

和方法引用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致,抽象方法的返回值类型即为构造器所属的类的类型!

package 构造器引用;import java.util.function.Supplier;public class Demo {    public static void main(String[] args) {        // 原始写法        Supplier<People> sup1 = new Supplier<People>() {            @Override            public People get() {                return new People();            }        };        sup1.get();        // Lambda 表达式        Supplier<People> sup2 = () -> new People();        sup2.get();        // 构造器引用        // Supplier中的T get()        // People 的空参构造器 People()        Supplier<People> sup3 = People::new;        sup3.get();    }}class People{    String name;    int age;    public People(){        System.out.println("空参构造器被调用啦!");    }    public  People(int a){        this.age = a;        System.out.println("有参构造器被调用啦!");    }}

Java8中的方法与构造器怎么引用

// Lambda 表达式  Function<Integer,People> fun1 = id -> new People(id);  fun1.apply(18);  // 构造器引用  // Function 中的R apply(T t)  // 函数式接口  // People 的有参构造器 People(T t)  Function<Integer,People> fun4 = People::new;  fun1.apply(18);

Java8中的方法与构造器怎么引用

以上就是关于“Java8中的方法与构造器怎么引用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯