繁体   English   中英

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

[英]passing instance method as parameter in java 8

可以说我有

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

我想将此函数作为Function传递给其他班级的java(不是Student)

哪种语法允许我这样做?

Function<Student,Integer> = ***

做就是了:

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;

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

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

您可能想要使用Supplier来存储对该方法的引用,因为您的方法不接受任何输入并返回一个输出(而java Function接受一个输入并返回一个输出)。

像这样-

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

或方法参考为

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM