Основная причина, о которой я знаю, - это производительность. Подсказка типов в clojure удаляет отражение, что может снизить производительность. Поэтому я бы добавил подсказки типов в функции, которые, как я измерил, являются критичными для производительности.
В разделе взаимодействия java по адресу clojure.org есть описание . Среди замечаний:
Clojure поддерживает использование подсказок типа, чтобы помочь компилятору избежать отражения в критически важных для кода областях кода. Как правило, следует избегать использования подсказок типа, пока не возникнет известное узкое место в производительности.
...
Как только подсказка типа будет помещена в идентификатор или выражение, компилятор попытается разрешить любые вызовы методов во время компиляции. Кроме того, компилятор будет отслеживать использование любых возвращаемых значений и выводить типы для их использования и т. Д., Поэтому для получения полностью разрешенных серий вызовов во время компиляции требуется очень мало подсказок. Обратите внимание, что подсказки типов не нужны для статических элементов (или их возвращаемых значений!), Поскольку компилятор всегда имеет тип для статики.
Вы всегда можете включить флаг предупреждения об отражении, чтобы увидеть, где вызывается отражение и, следовательно, где могут помочь подсказки типа.
EDIT:
Относительно вашего вопроса "Только для взаимодействия с Java?" --no. Подсказки по типу будут полезны даже в чистом clojure приложении. Проблема замедления производительности рефлексии - это факт жизни JVM, и проблема, с которой динамические языки должны иметь дело в целом.
Относительно того, где могут быть размещены подсказки типов, с clojure.org:
Их можно размещать в параметрах функций, именах с привязкой по именам, именах переменных (если они определены) и выражениях: