通过实例方法参数的Java 8
问题描述:
可以说我有通过实例方法参数的Java 8
public class Student {
public Integer getGrade() { return 1;}
}
,我想通过这个功能函数在其他类(非学生)的Java
这句法将允许我这样做所以?
Function<Student,Integer> = ***
答
事情是这样的 -
Function<Student, Integer> function = student -> student.getGrade();
或
Function<Student, Integer> function = Student::getGrade;
+1
请原谅downvote请/ – nullpointer
答
Function<Student, Integer>
的方法引用的意思是 “你带的学生,返回任何Integer
值”:
Function<Student, Integer> f1 = student -> 2;
如果您需要学生成绩,然后从返回此值方法:
Function<Student, Integer> f2 = student -> student.getGrade();
利用该方法的参考,它可能会被写在一个较短的形式:
Function<Student, Integer> f3 = Student::getGrade;
答
只要做到:
Function<Student,Integer> f = Student::getGrade;
你似乎已经忘了把一个名字为变量声明!
说明:
Function<Student,Integer>
表示一个函数,一个Student
作为参数并返回一个Integer
。显然,getGrade
不符合这些标准。但是,由于调用getGrade
需要一个Student
对象(因为它是一种实例方法),因此编译器可以巧妙地使用传入的参数Student
来调用getGrade
。
如果你不明白我的意思,语法相当于:
Function<Student,Integer> f = student -> student.getGrade();
因此,下面两行是一样的:
f(myStudent);
myStudent.getGrade();
多少秒你花你自己的研究? – Holger