Может ли вывод типа 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