前面见过lambda表达式会使我们的代码简洁明了,而方法引用则又是对lambda表达式更进一步的简化。其实方法引用的本质跟lambda表达式一样,都是匿名内部类对象。 下面先从代码层面感受一下从匿名内部类到方法引用的进化: 下面拿接口java。util。Comparator来说明,首先发现该接口上有FunctionalInterface注解,有该注解说明该类只有一个需要被实现的方法,因此可以使用lambda表达式来简化; 创建该接口实现类对象可以使用的方法如下:1。使用匿名内部类:使用匿名内部类创建对象ComparatorIntegercomparatornewComparatorInteger(){Overridepublicintcompare(Integero1,Integero2){returnInteger。compare(o1,o2);}};使用该对象,打印结果intcomparecomparator。compare(1,2);System。out。println(compare是compare); 打印结果:compare是12。使用lambda表达式:使用lambda表达式创建对象ComparatorIntegercomparator(o1,o2)Integer。compare(o1,o2);intcomparecomparator。compare(1,2);使用该对象,打印结果System。out。println(compare是compare); 打印结果:compare是13。使用方法引用:使用方法引用创建对象ComparatorIntegercomparatorInteger::intcomparecomparator。compare(1,2);使用该对象,打印结果System。out。println(compare是compare); 打印结果:compare是1当然除了以上三种方式之外,也可以创建一个类MyComparatorImpl实现Comparator接口,实现compare方法,然后使用下面的方法创建对象;ComparatorIntegercomparatornewMyComparatorImpl(); 类方法引用格式:类名::方法名使用要求: 1。首先需要可以使用lambda表达式表达; 2。其次lambda的方法体写的方法已经存在,且是某个类的方法; 3。此外还要满足实现函数式接口的方法参数和返回值类型必须和某个类的方法参数返回值要一致; 【如上述Comparator接口的compare方法参数是(Integero1,Integero2),返回值是上面写的compare方法恰好和Integer。compare方法一样,都是比较大小;Integer类中compare方法参数也是(intx,inty)和返回值类型也是int】java。util。Comparator的匿名内部类newComparatorInteger(){Overridepublicintcompare(Integero1,Integero2){returnInteger。compare(o1,o2);}}java。lang。Integercompare方法publicstaticintcompare(intx,inty){return(xy)?1:((xy)?0:1);} 好啦,java8新特性之方法引用先讲到这里。有疑问可以评论区讨论,求关注收藏转发〔送心〕〔呲牙〕〔呲牙〕〔呲牙〕