Groovy 2.0 ahora tiene control de tipo estático opcional. Si coloca una anotación @groovy.transform.TypeChecked
en una clase o método, Groovy utilizará estrictas reglas de tipado estático tipo Java.
Además, hay otra anotación @groovy.transform.CompileStatic
que es similar, excepto que va un paso más allá y realmente la compila sin tipado dinámico. El código de bytes generado para estas clases o métodos será muy similar al de Java directo.
Estas anotaciones se pueden aplicar a una clase individual o método:
import groovy.transform.TypeChecked
@TypeChecked
class MyClass {
...
}
También puede aplicar globalmente a todo un proyecto sin añadir anotaciones a los archivos de origen con una secuencia de comandos de configuración del compilador.La secuencia de comandos de configuración debería ser algo como esto:
withConfig(configuration) {
ast(groovy.transform.TypeChecked)
}
Run groovy
o groovyc
con la opción de línea -configscript
comando:
groovyc -configscript config.groovy MyClass.groovy
Hay más información en el manual de Groovy:
Lo que dices puede ser cierto, pero no tiene que ser así. Se podría implementar un indicador de este tipo que mejore la robustez de los usuarios que lo necesiten, manteniendo la naturaleza dinámica para aquellos que no lo necesitan. – ripper234
@ ripper234: tipologías estáticas vs dinámicas + metaprogramación son enfoques radicalmente diferentes para el diseño del lenguaje. Respaldar ambos al mismo tiempo requeriría mucho esfuerzo y tadeoffs, y probablemente terminarías agravando a ambos grupos de usuarios. Pero otra vez: usar Java es básicamente lo mismo que tu hipotética bandera "estricta" para Groovy. –