在 Java 中看到一些关于具有void返回类型的函数式接口的奇怪行为。
有人可以解释为什么task5和task6下面的声明编译吗?
public class Test {
private static int counter;
private static void testRunnable() {
/* Runnable has a void return type so the following won't compile.
* Error message is Void methods cannot return a value. (Java 67108969) Makes sense... */
// Runnable task1 = () -> { return counter; };
// Runnable task2 = () -> { return counter + 1; };
// Runnable task3 = () -> counter;
// …Run Code Online (Sandbox Code Playgroud) 我了解这些字段是什么以及如何使用它们,但我想知道:
Java 编译器如何在其编译步骤中实际处理这样的特殊字段?它真的只根据名称查找变量吗?
这看起来很像非 Java... 除了serialVersionUIDand 之外serialPersistentFields,还有其他的吗?