首先,我們注意到,您的dothingsWithTwoArgs也不是一成不變的,因此,你不應該試圖調用它在一個靜態的方式:你應該用你的虛擬類的實例,或使dothingsWithTwoArgs靜態
這裏有一些插圖,這將讓你去
首先,你需要有你的TriFinction作爲其參數
實例的一個方法:
public static String sumToString(String a,String b, String c, TriFinction<String,String,String,String> f) {
return f.whatEver(a, b, c);
}
其次,在啞類你需要一個你TriFinction的genric簽名相匹配方法(這意味着,例如,它接收三個參數爲O,J和I和它返回一個R)
例如
public static String dothingsWithThreeArgs(String a, String b,String c) {
return a+ " " + b + " " + c;
}
現在你可以在你的主要方法使用的方法例如參考:
System.out.println(sumToString("2","3","4",Dummy::dothingsWithThreeArgs));
這裏是您TriFinction第二插圖沿着完整的例子(我猜你應該重構,重新命名爲三官能:))
public class ExtractWithLambda {
@FunctionalInterface
interface TriFinction<O,I,J, R> {
R whatEver(O object, I input1, J input2);
}
public static String writeEqu(TriFinction<Double,Double,Double,String> f) {
return f.whatEver(2.5, 3.4, 5.6);
}
public static String sumToString(String a,String b, String c, TriFinction<String,String,String,String> f) {
return f.whatEver(a, b, c);
}
public static void main(String[] args) {
System.out.println(writeEqu(Dummy::writeEquation));
System.out.println(sumToString("2","3","4",Dummy::dothingsWithThreeArgs));
}
}
class Dummy {
public static String dothingsWithThreeArgs(String a, String b,String c) {
return a+ " " + b + " " + c;
}
public static String writeEquation(double a, double b, double c) {
return a + "*x*x " + b + "*x " + c ;
}
}
感謝您的回覆。我不希望代碼工作。我只需要知道爲什麼日食沒有提取到一個變量。當我在intellij中按Ctrl + Shift + l時,它將它提取到「TriFinction dothingsWithTwoArgs = Dummy :: dothingsWithTwoArgs;」。我認爲方法引用也適用於非靜態方法。例如String :: toLowerCase –