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

时间:2017-03-08 07:36:19

标签: java methods lambda java-8

让我说我有

public class Student {
     public Integer getGrade() { return 1;}
}

我希望将此函数作为函数在java中传递给其他类(不是学生)

哪种语法允许我这样做?

Function<Student,Integer> = ***

4 个答案:

答案 0 :(得分:3)

Function<Student, Integer>表示“您接受学生并返回任何Integer值”:

Function<Student, Integer> f1 = student -> 2;

如果您需要学生成绩,请从getGrade方法返回此值:

Function<Student, Integer> f2 = student -> student.getGrade();

使用方法参考,可能会以较短的形式编写:

Function<Student, Integer> f3 = Student::getGrade;

答案 1 :(得分:3)

只是做:

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();

答案 2 :(得分:1)

由于getGrade不是静态方法,因此您需要首先实例化Student以存储对它的引用。

Student student = ...;
Supplier<Integer> = student::getGrade;

您可能希望使用Supplier来存储对该方法的引用,因为您的方法采用 no 输入并返回一个输出(而java Function采用< strong>一个输入并返回一个输出。)

答案 3 :(得分:0)

像这样 -

Function<Student, Integer> function = student -> student.getGrade();

或方法参考

Function<Student, Integer> function = Student::getGrade;