局部变量的Java 10类型推断可以推断出无效吗?

时间:2018-03-22 12:45:09

标签: java type-inference java-10

使用Java 10,我们可以使用类型推断。

String s1 = "hello"; // before Java 10
var s2 = "hello"; // now

但是,有一件事我们以前无法做到:拥有 void 类型的变量。

因此,在以前的版本中,我们根本无法定义变量类型void。但现在我们可以将返回void的方法的结果分配给变量:

void emptyMethod() { }
...

void v1 = emptyMethod(); // won't compile
var v2 = emptyMethod(); // no problem at all

问题是 - 它为什么甚至编译,它的目的是什么?你有这个奇怪的用例吗?

void类型的变量没有方法,甚至不能用作方法的参数。

1 个答案:

答案 0 :(得分:32)

为什么你认为它编译?它不编译:

> javac Main.java
Main.java:5: error: cannot infer type for local variable v2
        var v2 = emptyMethod(); // no problem at all
            ^
  (variable initializer is 'void')
1 error

你可能使用IntelliJ IDEA,对吗? IDEA目前没有检测到这种错误。有一个错误:https://youtrack.jetbrains.com/issue/IDEA-188623