在阅读 Lambda的状态一文时, 我遇到了 目标打字 这一主题,我对以下段落感到有些困惑:
ActionListener l = (ActionEvent e) -> ui.dazzle(e.getModifiers());
这种方法的含义是,相同的lambda表达式在不同的上下文中可以具有不同的类型:
Callable<String> c = () -> "done"; PrivilegedAction<String> a = () -> "done";
在第一种情况下,lambda表达式
() -> "done"
表示的实例Callable
。在第二种情况下,相同的表达式表示PrivilegedAction的实例。编译器负责推断每个lambda表达式的类型。它使用表达式出现的上下文中期望的类型。这种类型称为目标类型。Lambda表达式只能出现在目标类型为功能接口的上下文中。
您能否以简单的方式向我解释与引用的段落有关的这些要点:
如果您还提供代码段,我将非常感谢。
上下文 是在代码中使用表达式的方式。这不只是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章。
使用jdk 1.8.051Source=1.7,target=1.7 Junit 4.6,ant 1.8.0 发生了什么事<所有以1.7通过的测试现在都失败了。我需要知道以下几点: 为什么会这样? 有没有像-XX:-UseSplitVeriator(java 1.7)这样的选项 如何找出问题的根源? 要采取什么步骤来解决这个问题? 我们有用于构建、部署和测试的ant目标 构建和部署工作正常,但Ju
如下图所示,SonarSource在11之前的Java版本中终止了对运行代码分析器的支持 我试图搜索一个完整的示例,说明如何使用Java11分析器运行bitbucket管道来执行SonarScanner分析,但目标代码使用Java11之前的版本(例如Java8),但我找不到一个。根据那个形象,应该是可能的。
我正试图在quarkus应用程序目录中创建我的“数据”文件夹。我试过用文档写的所有东西,比如应用程序。属性、maven属性和创建资源配置。json。我得到的最好结果是保存资源配置。将json文件本身放入-Pnative building中。如果能帮我解决这个问题,我将不胜感激!在此处输入图像描述 Quarkus属性: pom文件本身:
回顾一下我们写的第一个 Rust 程序就是带副作用的,其副作用就是向标准输出(stdout),通常是终端或屏幕,输出了 Hello, World! 让屏幕上这几个字符的地方点亮起来。println! 宏是最常见的输出,用宏来做输出的还有 print!,两者都是向标准输出(stdout)输出,两者的区别也一眼就能看出。至于格式化输出,基础运算符和字符串格式化小节有详细说明,这里就不再啰嗦了。 更通用
本文向大家介绍Java8中对泛型目标类型推断方法的改进,包括了Java8中对泛型目标类型推断方法的改进的使用技巧和注意事项,需要的朋友参考一下 一、简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。通俗点将就是“类型的变量”。这种类型变量可以用在类、接口和方法的创建中。 理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你
问题内容: 在使用树集时,我发现了非常奇怪的行为。 根据我的理解,以下程序应打印两条相同的行: 但奇怪的是它打印: 我无法理解-为什么树集的行为如此? 问题答案: 发生这种情况是因为SortedSet的Comparator用于排序,但是removeAll依赖于每个元素的方法。从SortedSet文档中: 请注意,如果排序集要正确实现接口,则排序集(无论是否提供显式比较器)所维护的顺序必须 与equ