阅读一篇文章状态我来到主题目标打字时我自己有点混淆当我阅读以下段落时:
ActionListener l = (ActionEvent e) -> ui.dazzle(e.getModifiers());这种方法的一个含义是,相同的lambda表达式在不同的上下文中可以有不同的类型:
Run Code Online (Sandbox Code Playgroud)Callable<String> c = () -> "done"; PrivilegedAction<String> a = () -> "done";在第一种情况下,lambda表达式
() -> "done"表示的实例Callable.在第二种情况下,同一表达式表示PrivilegedAction的实例.编译器负责推断每个lambda表达式的类型.它使用表达式出现的上下文中的预期类型; 此类型称为目标类型.lambda表达式只能出现在目标类型是功能接口的上下文中.
访问这里的完整文章
您能否以一种简单的方式向我解释以上段落所遵循的这些要点:
如果你还给我一个代码片段,我将非常感激
我正在阅读赫伯特·希尔尔德(Herbert Schildt)的“ Java:完整参考”中有关lambda的一章,其中有很多参考“ lambda目标类型”和“目标类型上下文”:
功能接口定义lambda表达式的目标类型。这是一个关键点:lambda表达式只能在指定其目标类型的上下文中使用。
要么:
如前所述,lambda表达式不是单独执行的。相反,它形成了由指定其目标类型的功能接口定义的抽象方法的实现。结果,只能在定义目标类型的上下文中指定lambda表达式。当将lambda表达式分配给功能接口引用时,将创建这些上下文之一。其他目标类型上下文 包括变量初始化,返回语句和方法参数,仅举几例。
完后还有:
与lambda表达式关联的功能接口可以是通用的。在这种情况下,lambda表达式的目标类型部分由声明函数接口引用时指定的一个或多个类型实参确定。
有人可以帮我了解lambda目标类型的含义吗?
例如,在(int n) -> n % 2 == 0是int拉姆达的目标类型?
或在:
interface MyInterface<T> {
T func();
}
MyInterface<String> myInt = () -> { return "123"; }
Run Code Online (Sandbox Code Playgroud)
Lambda的目标类型是什么?是String还是MyInterface<String>?lambda的背景是什么?
我阅读了有关该主题的SO的几篇文章,但仍然无法完全理解这些概念。
谢谢。