В Груви типов являются необязательными, так что вы можете использовать либо:время компиляции в Groovy
String foo = "foo"
foo.noSuchMethod()
или
def foo = "foo"
foo.noSuchMethod()
Я предположил, что первый пример будет генерировать ошибку во время компиляции, тогда как второй будет работать только во время выполнения. Однако, похоже, это не так. По моему опыту, ошибка компиляции не генерируется ни в одном случае.
Правильно ли я предполагаю, что единственное преимущество объявления типа ссылки - это форма документации, то есть сообщить намерения другим программистам. Например, если я пишу такой метод, как:
def capitalize(String arg) {
return arg.toUpperCase()
}
Это связывается тип аргументов, которые должны быть переданы функции гораздо более эффективно, чем:
def capitalize(def arg) {
return arg.toUpperCase()
}
выполняет ли Groovy компилятор любого типа -Проверка при указании типов?
Спасибо, Дон
Новый InvokeDynamic в JDK 7 улучшит скорость Groovy. Большинство проблем производительности с динамическими языками JVM связаны с ограничениями, которые VM налагает на язык. Большинство вещей за кулисами с Java являются динамическими, это просто язык, который накладывает статические типы. – Joshua
Да, и я не жаловался на скорость, просто объясняя. – billjamesdev