jdk8-方法引用
2017-03-26 15:09
113 查看
方法引用的形式
方法引用的标准形式是:类名::方法名。(注意:只需要写方法名,不需要写括号)
有以下四种形式的方法引用:
类型 示例
引用静态方法 ContainingClass::staticMethodName
引用某个对象的实例方法 containingObject::instanceMethodName
引用某个类型的任意对象的实例方法 ContainingType::methodName
引用构造方法 ClassName::new
下面我们通过一个小Demo来分别学习这几种形式的方法引用:
Student 类:
StudentComparator 比较器:
测试类:MethodReferenceTest
方法引用的标准形式是:类名::方法名。(注意:只需要写方法名,不需要写括号)
有以下四种形式的方法引用:
类型 示例
引用静态方法 ContainingClass::staticMethodName
引用某个对象的实例方法 containingObject::instanceMethodName
引用某个类型的任意对象的实例方法 ContainingType::methodName
引用构造方法 ClassName::new
下面我们通过一个小Demo来分别学习这几种形式的方法引用:
Student 类:
public class Student { private String name; private int score; public Student(String name, int score) { this.name = name; this.score = score; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public static int coompareStudentByScore(Student student1,Student student2){ return student1.getScore() - student2.getScore(); } public static int coompareStudentByName(Student student1,Student student2){ return student1.getName().compareToIgnoreCase(student2.getName()); } public int compareScore(Student student){ return this.score-student.getScore(); } }
StudentComparator 比较器:
public class StudentComparator { public int coompareStudentByScore(Student student1,Student student2){ return student1.getScore() - student2.getScore(); } public int coompareStudentByName(Student student1,Student student2){ return student1.getName().compareToIgnoreCase(student2.getName()); } }
测试类:MethodReferenceTest
* Created by CeaserWang on 2017/1/15. */ public class MethodReferenceTest { public String toString(Supplier<String> supplier){ return supplier.get()+"test"; } public String toString2(String str, Function<String,String> function){ return function.apply(str); } public static void main(String[] args) { Student student1 = new Student("zhangsan",20); Student student2 = new Student("lisi",90); Student student3 = new Student("wangwu",50); Student student4 = new Student("zhaoliu",60); List<Student> students = Arrays.asList(student1,student2,student3,student4); //lambda形式 students.sort((studentparam1,studentparam2) -> Student.coompareStudentByName(studentparam1,studentparam2)); students.forEach(student -> System.out.println(student.getName()));*/ // 引用静态方法 /* students.sort( Student::coompareStudentByName); students.forEach(student -> System.out.println(student.getName())); System.out.println("----------------------------------------------"); //引用某个对象的实例方法 StudentComparator studentComparator = new StudentComparator(); students.sort(studentComparator::coompareStudentByScore); students.forEach(student -> System.out.println(student.getScore())); System.out.println("----------------------------------------------"); //引用某个类型的任意对象的实例方法 students.sort(Student::compareScore); students.forEach(student -> System.out.println(student.getScore())); MethodReferenceTest methodReferenceTest = new MethodReferenceTest(); //引用构造方法 System.out.println( methodReferenceTest.toString(String::new)); System.out.println( methodReferenceTest.toString2("hello",String::new)); } }
相关文章推荐
- JDK8新特性☞方法构造方法的引用
- JDK8新特性之方法引用
- JDK8-方法引用 ,构造引用,数组引用(四)
- jdk8 lambda的方法引用引起的编译器bug
- JDK8-练习题使用方法引用、构造引用、数组引用改造(五)
- 引用Hibernate的Java桌面程序打包方法
- 一道理解c#中对象(引用类型)相互赋值和方法覆盖(overriding)的题目
- 引用天下会"使用OleDbCommandBuilder时出现“Insert into 语句的语法错误”的解决方法"
- 在ASP.net中,不引用第三方类库的、轻便的、将报表导出到Excel中的方法
- 对Web页面元素的绝对唯一引用方法
- 引用类型和值类型在方法调用中的异同?
- showModelessDiablog()的参数回调,以及父级页面元素引用的方法
- 奇怪的引用错误及解决方法
- USING STATIC IMPORTS FOR CONSTANTS AND METHODS(使用静态导入引用常量与方法)
- 编译.NET项目提示“找不到系统命名空间,请添加系统组件的引用”问题的解决方法(该组件已被该项目正确引用)
- 控件的引用方法
- vs.net 2005中引用webservice的简单方法
- 传值调用与引用调用/多态/方法重载/构造函数/静态与非静态/属性、方法作用范围/字段与属性
- [引用]信息检索及信息过滤方法概述
- java方法参数传值传引用的一点看法