Java 双冒号运算符引用 (::)

标签 java java-8

test::testMethod == test::testMethod

真的吗?我想知道它们是否会引用同一个对象。这段代码无法编译。但可能有几种情况需要澄清。

我怀疑这会扩展到

Runnable r = () -> test.testMethod()
Runnable r1 = () -> test.testMethod()

以及以下内容是否正确。

r == r1

最佳答案

即使您的代码可以编译并且 test::testMethod 声明为 Runnable 答案 test::testMethod == test::testMethod 总是返回 false,因为您与两个 diff 类实例进行比较。对于每个 lambda 表达式,编译器都会为其创建一个合成匿名内部类。例如:

//a synthentic anonymous lambda class A implemented Runnable
Runnable r = () -> test.testMethod(); 

//a synthentic anonymous lambda class B implemented Runnable
Runnable r1 = () -> test.testMethod();

r.getClass().equals(r1.getClass());// always return false

关于Java 双冒号运算符引用 (::),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43114217/

相关文章:

java-8 - 使用 Java 8 流 API 将 List<Map<String, Object>> 转换为 Map<String, List<Map<String, Object>>>

java - 如何在 Java 中将扫描器字符串制作成 Stream?

java - Eclipse 在开始之前就卡住了

java - 你能将 Java Retval 放入数组中吗

java - 是否可以使用birt框架绘制折线图?

java - 可以以编程方式退出简单的等待情况吗?

java - 使用 JAX-RS Jersey 进行身份验证和授权的简便方法

java - Lombok 继承@EqualsAndHashCode

java - 无法通过 Java 8 上的反射调用 HashMap 的 getEntry

Java 8 optional 添加仅当 optional.isPresent 时才返回结果