С тех пор как я слышал о типе вывода (в Haskell), я жил под впечатлением, что Java - это полная противоположность, т.е. не имеет вывода типа. Недавно, хотя, у меня был момент аха, и понял, что Java использует вывод типа в своей реализации generics.
Затем я прочитал две статьи Гилада Брача (по-моему, одного из людей, стоящих за реализацией дженериков на Java, насколько я понимаю). Первая статья - это учебник о дженериках (PDF), в котором он явно говорит, что компилятор выведет фактический аргумент типа, используемый для замены параметра типа формата. Итак, там тип вывода в Java, но почему только для дженериков, почему не что-то вроде С# var
ключевое слово? И это мой вопрос к вам.
Почему Java не имеет больше встроенного в компилятор вывода типа?
Я дам вам ответ, и это связано со вторым документом, который я прочитал, Pluggable Type Systems (PDF). Кажется, Гилад Брача считает, что часть вывода не должна быть частью компилятора, но функция IDE или аналогичная (раздел 4, пункт 6 в вышеупомянутой статье):
Улучшенный инженерный подход применять вывод типа как отдельный инструмент, доступный в среде IDE. Программисты, которые находят тип ввода аннотации утомительны могут вызвать inferencer по запросу.
Как вы думаете?