Может ли вывод типа Java 10 для локальных переменных infer void?
С 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
Почему, по вашему мнению, он компилируется? Он не компилируется:
> 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