Приведу свою часть моего ответа на Should I use Groovy's @CompileStatic if I'm also using Java 7:
Хотя быстрее, чем обычный Groovy, он может составить только подмножество Groovy и ведет себя немного по-другому. Особенно все динамические функции недоступны.
Все СС будут обходить стороной. Строители не будут работать в целом, некоторые из них имеют расширения для компилятора, чтобы позволить им проходить. Также методы выбираются во время компиляции с использованием статических типов, в то время как Groovy обычно использует методы, доступные во время выполнения и типы времени выполнения. Это может привести к тому, что будут вызываться различные методы.
Конечно, @CompileStatic также обеспечивает некоторую безопасность, поскольку задача компилятора заключается в проверке программ во время выполнения. Но поскольку статическая информация обречена быть неполной, никогда не может быть 100% -ной безопасности.
Итак, где это без проблем ... хорошо ... POGO, например, поскольку они обычно не содержат всего много кода. И, конечно, для классов, перенесенных с Java на Groovy копией &.
Куда я хочу? Ну, в настоящее время, вероятно, на Android, так как там размер кода оказывает влияние, а статический скомпилированный код более компактен. В противном случае я лично прекрасно разбираюсь в том, что вообще не использую @CompileStatic. Это скорее вопрос вкуса. В некоторых случаях наблюдается улучшение производительности для жестких циклов, но это требует от вас поиска и идентификации, сначала профилируя ваше приложение.
Занятия, которые вы хотите ускорить/проверить тип и не нуждаетесь в динамических функциях? –