上下文 是在代码中使用表达式的方式。这不只是lambda表达式-这是任何表情,像
a+b,
a++或
Math.random()。
可能的情况示例:
作业: 取表达式
a+b
。如果将其分配给变量,则会在分配上下文中使用它:c = a+b;
方法或构造函数的参数: 。这是当您将其传递给某些方法调用时:
System.out.println(a+b);
返回值: 在
return
语句中使用表达式时:return a+b;
数组索引: 当您的表达式是数组索引时:
x[a+b] = 3;
该 目标类型 是预期在给定上下文的类型。例如,如果您将方法定义为:
public int myMethod() { ... }
那么
return语句主体中的任何表达式都应该具有类型
int。因此,如果您有:
return a+b;
在内部
myMethod,预计
a+b将解析为
int或可分配给int的内容。
现在,假设您具有以下方法:
public void anotherMethod( double d );
然后,当您调用它并传递一个表达式作为参数时,该表达式应为type
double。像这样的电话:
anotherMethod(a+b);
希望
a+b解决一个
double。那是它的 目标类型 。在你的例子中
在声明中:
Callable<String> c = () -> "done";
该表达式是lambda表达式
() -> "done"。在 分配 环境中使用它(分配给
c)。而 目标类型
是
Callable<String>因为这是您向分配任何内容时所期望的
c。
有关更正式的讨论,请参阅Java语言规范的第5章。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)