我在日蚀氧气里玩Lambda我有这样的代码
@FunctionalInterface
interface TriFinction<O,I,J, R> {
R whatEver(O object, I input1, J input2);
}
class Dummy {
public String dothingsWithTwoArgs(String a, String b) {
return a+b;
}
}
public class LambdaTest {
public static void main(String[] args) {
Dummy::dothingsWithTwoArgs;
}
}
我无法提取Dummy::dothingsWithTwoArgs。Eclipse显示了一个编译错误语法错误,插入“AssignmentOperator Expression”以完成表达式,但提取在intellij中工作良好。在eclipse中有没有解决这个问题的方法?
将Lambda提取到一个方法似乎只支持Eclipse 4.23(2022年2月,6年后)
添加了一个新的内容辅助以将lambda的主体提取到方法中。
要调用新功能,请在选定的lambda主体中执行Ctrl1:
我们应该知道的一件主要事情是编译错误消息取决于编译器。这并不意味着不同的编译器会一直产生不同的错误消息。但是可能会有一些情况。
关于你的问题,我找到了这个答案和帖子。这篇文章在主题而不是声明下详细解释了这个错误。
所以重点是这个。正如您所提到的,这个错误消息是特定于Eclipse编译器的。编译器提出的要点是,您的行只是一个表达式,而不是一个语句。为了将其理解为语句,编译器希望您添加赋值运算符。这就是插入“AssignmentOperator Expression”以完成表达式的全部含义。你们要做的就是把这一行赋给另一个定义好的变量,就像这样。
someVariable = Dummy::dothingsWithTwoArgs;
希望你能找到更多的深度和更多的例子与我提到的来源。:))
首先请注意,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的第二个插图(我想你应该重构并重命名为TriFunction:))
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 ;
}
}
我下载了龙目。jar(lombok-1.16.14.jar)将其放入我的下载中。然后我点击这个jar,执行正确地识别了我的MacOS上的Eclipse实例,然后我选择了我想要的实例。pom中也规定了龙目岛。提供了xml org.projectlombok lombok 1.16.14 在eclipse.ini我得到了添加:-javaagent:... /Eclipse/lombok.jar 龙目岛
我对java“I get this error”不熟悉,找不到适合getText(String)方法JTextComponent的方法。getText(int,int)不适用(实际参数列表和形式参数列表长度不同)方法JTextComponent。getText()不适用 (Alt Enter显示提示)“当我试图运行我的程序时。请帮助。我做错了什么?
我想允许用户上传两个图像,封面和徽标。然后将它们保存在fi恢复中。我在行中出错 找不到适用于into(Uri)方法RequestCreator的方法。into(目标)不适用(参数不匹配;Uri无法转换为目标)方法RequestCreator。into(ImageView)不适用(参数不匹配;Uri无法转换为ImageView)
在我们的代码库从java 1.7迁移到1.8的过程中,我们得到了一个错误消息“方法...不适用于几个代码位置上的参数,它们都遵循泛型用法中的相同模式。 我们目前主要在上使用(4.5.2),但也可以使用(4.6)确认行为。以及符合级别为1.7的都可以编译我们的代码而不会出错。 下面是一个最小、完整且可验证的示例: 现在,在 do 中切换注释掉的行方法会使代码编译,因此我们确实有一个解决方法。仍然错误
您好,我正在尝试使用PostConstruct方法初始化字段,但在测试中,此方法不会填充bidiMap字段。 有没有办法模拟字段,它是的字段? 测试: 正在测试的类:
起初,我在使用< code>writeAndFlush(...)直到我偶然发现了这个修复。现在,我已经可以使用< code>writeAndFlush(...)每个字符串都带有后缀/r/n。当我尝试发送< code>ByteBuf对象时,问题仍然存在。显然,我不能只在消息末尾添加/r/n。对此有什么解决办法吗? 如果有帮助,我将使用