2017-03-08 16 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; 

あなたはおそらく、あなたの方法は、なし入力を受け取り、(の入力を受け取り、1つの出力を返しますFunction javaのに対し)1つの出力を返すため、メソッドへのストアの参照にSupplierを使用したいと思います。

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

あなたの場合: -

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

したがって、以下の2行は同じです:

f(myStudent); 
myStudent.getGrade();