Java 10 局部变量的类型推断可以推断void吗?
Can Java 10 type inference for local variables infer void?
有了Java10,我们就可以使用类型推断了。
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
类型的变量没有方法,甚至不能用作方法的参数。
为什么你认为它可以编译?它不编译:
> 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
有了Java10,我们就可以使用类型推断了。
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
类型的变量没有方法,甚至不能用作方法的参数。
为什么你认为它可以编译?它不编译:
> 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