首先,我们注意到,您的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 –