通过实例方法参数的Java 8
可以说我有通过实例方法参数的Java 8
public class Student { public Integer getGrade() { return 1;}
}
,我想通过这个功能函数在其他类(非学生)的Java
这句法将允许我这样做所以?
Function<Student,Integer> = ***
回答:
作为在getGrade
不是一个静态方法,你需要以一个参考存储它首先实例Student
。
Student student = ...; Supplier<Integer> = student::getGrade;
你可能会希望使用Supplier
存储参考方法,因为你的方法需要没有输入,并返回一个输出(而java的Function
需要一个输入,并返回一个输出)。
回答:
事情是这样的 -
Function<Student, Integer> function = student -> student.getGrade();
或
Function<Student, Integer> function = Student::getGrade;
回答:
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();
以上是 通过实例方法参数的Java 8 的全部内容, 来源链接: utcz.com/qa/261137.html