【发布时间】:2017-03-08 15:59:53
【问题描述】:
假设我有
public class Student {
public Integer getGrade() { return 1;}
}
我想将此函数作为 Java 中的函数传递给其他类(不是学生)
哪种语法允许我这样做?
Function<Student,Integer> = ***
【问题讨论】:
标签: java methods lambda java-8
假设我有
public class Student {
public Integer getGrade() { return 1;}
}
我想将此函数作为 Java 中的函数传递给其他类(不是学生)
哪种语法允许我这样做?
Function<Student,Integer> = ***
【问题讨论】:
标签: java methods lambda java-8
只要做:
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();
【讨论】:
Function<Student, Integer> 表示“你带一个学生并返回任何Integer 值”:
Function<Student, Integer> f1 = student -> 2;
如果您需要学生成绩,则从 getGrade 方法返回此值:
Function<Student, Integer> f2 = student -> student.getGrade();
使用方法引用,可以写成更短的形式:
Function<Student, Integer> f3 = Student::getGrade;
【讨论】:
这样的——
Function<Student, Integer> function = student -> student.getGrade();
或方法引用为
Function<Student, Integer> function = Student::getGrade;
【讨论】: