Спасибо подписчикам, которые недавно подняли этот вопрос в чате-обсуждении.Ключевое слово var появилось в Java 10. Указание
var вместо типа
локальной переменной применяет к ней механизм вывода типов (type inference). Тип будет вычислен на этапе компиляции из того, чем переменная инициализируется.
Отсюда несколько выводов. Во-первых, нельзя использовать
var в полях класса, параметрах метода, и где-либо еще кроме локальных переменных. Во-вторых, обязана быть инициализация с понятным типом – варианты
var x; или
var x = null; не скомпилируются.
И главное следствие – к концу компиляции у таких переменных фиксированный и известный тип, который не может быть изменен позднее. А это и есть определение строгой типизации.
Ответ: нет, выводимый тип – строгий. Более того, типизация остается статической.
Главное упущение – в инициализации разрешено использовать
diamond operator. В обычных обстоятельствах в нём выведется правильный generic-тип, но в случае
var информации недостаточно, и типом-параметром будет
Object.