Процитируем JEP Вывод типа локальной переменной JEP :
В цепочке вызовов вроде:
int maxWeight = blocks.stream() .filter(b -> b.getColor() == BLUE) .mapToInt(Block::getWeight) .max();
никто не беспокоится (или даже отмечает), что промежуточные типы
blockquote>Stream
иIntStream
, а также тип лямбда-формальностиb
явно не указаны в исходном коде.Вас это беспокоит?
, если один класс (скажем, «Репозиторий») меняет тип возвращаемого значения (например, с String на int). При явной типизации компиляция не удалась бы в классе, вызывающем «Репозиторий».
blockquote>Если у вас есть перегрузки, такие как
setText
в вашем примере, тоRepository repository = ...; myTextView.setText(repository.getFormerlyStringNowInt());
также не будет работать без вывода типа. Чтобы это не сработало, ваш стандарт кода должен требовать, чтобы результат каждой операции присваивался локальной переменной, как в
Stream
stream1 = blocks.stream(); Predicate pred = b -> { Color c = b.getColor(); return c == BLUE; }; Stream stream2 = stream1.filter(pred); ToIntFunction getWeight = Block::getWeight; IntStream stream3 = stream2.mapToInt(getWeight); int maxWeight = stream3.max(); И в этот момент вы упрощаете ошибки, просто уменьшая удобочитаемость и возможность случайно использовать неправильную переменную.
Наконец, Kotlin не был создан в вакууме: дизайнеры могли видеть, что когда C # ввел локальный вывод типов в 2007 году, это не привело к значительным проблемам. Или они могли бы посмотреть на Scala, которая была у нее с начала 2004 года; у него было (и есть) множество жалоб пользователей, но локальный вывод типа не является одним из них.
Я не думаю, что есть способ сделать это без написания собственного плагина maven. Тем не менее, вы можете попасть в classpath, используя зависимость : build-classpath . Это полезно?
Я подкрепляю зависимость: предложение build-classpath. В настоящее время он не помещается в свойство, но его можно легко изменить. (исправления приняты)