在java 8中将实例方法作为参数传递

Mat*_*tan 1 java methods lambda java-8

可以说我有

public class Student {
     public Integer getGrade() { return 1;}
}
Run Code Online (Sandbox Code Playgroud)

我想将此函数作为 java 中的函数传递到其他类(不是学生)

哪种语法允许我这样做?

Function<Student,Integer> = ***
Run Code Online (Sandbox Code Playgroud)

Swe*_*per 5

做就是了:

Function<Student,Integer> f = Student::getGrade;
Run Code Online (Sandbox Code Playgroud)

您似乎忘记为变量声明命名!

解释:

Function<Student,Integer>表示一个以 aStudent作为参数并返回 的函数Integer。显然,getGrade不满足这些标准。但是,由于调用getGrade需要一个Student对象(因为它是一个实例方法),因此编译器可以巧妙地使用Student传入的参数来调用getGrade

如果你不明白我的意思,语法相当于:

Function<Student,Integer> f = student -> student.getGrade();
Run Code Online (Sandbox Code Playgroud)

因此,下面两行是相同的:

f(myStudent);
myStudent.getGrade();
Run Code Online (Sandbox Code Playgroud)