2017-03-08 111 views
0

可以说我有通过实例方法参数的Java 8

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

,我想通过这个功能函数在其他类(非学生)的Java

这句法将允许我这样做所以?

Function<Student,Integer> = *** 
+3

多少秒你花你自己的研究? – Holger

回答

0

作为在getGrade不是一个静态方法,你需要以一个参考存储它首先实例Student

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

你可能会希望使用Supplier存储参考方法,因为你的方法需要没有输入,并返回一个输出(而java的Function需要一个输入,并返回一个输出)。

0

事情是这样的 -

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

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

请原谅downvote请/ – nullpointer

2

Function<Student, Integer>的方法引用的意思是 “你带的学生,返回任何Integer值”:

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

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

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

利用该方法的参考,它可能会被写在一个较短的形式:

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

只要做到:

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