请解释Java8的lambda方法的语法。
关于lambda函数有很多解释,但我找不到关于语法的彻底解释,而且我发现很难学习正确地复制语法,因为我不明白为什么它们是按原样写的。
下面是我遇到的一个常见的例子,NetBeans:
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new MainAppJFrame();
});
}
() -> {
// do stuff
}
interface ExampleLambdaConsumer {
public void doSomething(Runnable r);
public void doSomething(java.lang.reflect.Method m);
}
class C implements ExampleLambdaConsumer {
// implementations for doSomething methods here
public static void main(String[] args) {
doSomething(() -> {
// lambda method body here
}
}
}
语法为:
arguments -> body
其中参数
可以是
>
()
否则,它们相当于()->{f();}
或()->{return f();})
。编译器从调用上下文中推断它,但通常会倾向于后者。
因此,如果您有两个方法:void handle(supplier
和void handle(Runnable)
,那么:
>
handle(()->{return f();})
和handle(()->x)
将调用第一个,
handle(()->{f();}
将调用第二个,并且
句柄(()->f())
:
>
如果f()
返回void
或不能转换为t
的类型,则它将调用第二个
如果有两个SwingUtilities.InvokeLater方法仅在参数列表上不同,会发生什么情况?
这取决于那些参数列表是什么。如果另一个invokelater
也正好有一个参数,并且该参数的类型也是具有一个void*()
类型的方法的接口,那么它会抱怨说它无法弄清楚您指的是哪一个方法。
为什么写的是原样?嗯,我想这是因为C#和Scala的语法几乎相同(它们使用=>
而不是->
)。
问题内容: 请说明Java 8的lambda方法的语法。 关于lambda函数是什么,有很多解释,但是我找不到语法的详尽解释,而且我发现很难正确地正确复制语法,因为我不明白为什么它们会照原样重写。 这是NetBeans提供的一个常见案例: 因此,以下lambda表达式可以解析为匿名Runnable对象的run()方法: 该->是lambda语法正确的,对不对?花括号只包含匿名方法代码。括号是否为空
问题内容: 我迅速在Google上找到了答案,但找不到/认为准确的搜索参数。 我正在自学Java,但似乎找不到某种语法的含义。 这意味着什么?我模糊地记得箭头括号与向量有关,但是根据上面的代码,我感觉到它与枚举有关。 任何帮助或澄清将不胜感激。谢谢。 问题答案: 这些称为泛型。 通常,这些在定义类,接口和方法时使 类型 (类和接口)成为参数。 与使用非泛型代码相比,使用泛型有很多好处,如Java教
问题内容: 以下这部分代码是什么意思?我什至不知道这个语法叫什么。 这是原始代码(可从此处找到:http : //developer.android.com/guide/components/processes-and- threads.html ): 问题答案: 告诉AsyncTask使用3种不同的类型进行描述,当您使用AsyncTask时,将String作为第一个参数,将Void作为第二个参数
问题内容: 我意识到Java 8 lambda实现可能会发生变化,但是在lambda build b39中,我发现仅当lambda表达式返回非空类型时才可以省略花括号。例如,这将编译: 但是删除这样的括号: 给出错误 谁能解释这是怎么回事? 问题答案: 当lambda主体是单个表达式或void方法调用时,可以省略花括号。每个表达式都求值,因此不能为空。 如果lambda的主体是语句块(例如,一系列
问题内容: 这些方法之间在功能上有区别吗? 编辑(从其他贡献者添加了此语法): 问题答案: 不,但第一个是首选样式。 编辑: 另一个选项是 此外,它还允许调用者使用varargs语法。
问题内容: 我被要求在我的编码中使用增强循环。 我只学习了如何使用传统循环,因此不知道它和增强循环之间的区别。 增强循环与Java中的传统循环有何不同? 有什么复杂的地方我应该注意哪些教程往往不提? 问题答案: 增强的for循环: 传统的for循环