我在Perl的日子里记得“use strict”语句,它会导致运行时进行额外的验证。是否有Groovy的等价物?
我不喜欢在运行时被编译时检测到的东西咬住,比如将一些参数传递给构造函数。
答案 0 :(得分:19)
Groovy 2.0现在有可选的静态类型检查。如果在类或方法上放置@groovy.transform.TypeChecked
注释,groovy将使用类似Java的静态类型规则。
此外,还有另一个类似的注释@groovy.transform.CompileStatic
,除了它更进一步,实际上没有动态类型编译它。为这些类或方法生成的字节代码与直接Java非常相似。
这些注释可以应用于单个类或方法:
import groovy.transform.TypeChecked
@TypeChecked
class MyClass {
...
}
您还可以将它们全局应用于整个项目,而无需使用编译器配置脚本向源文件添加注释。配置脚本应如下所示:
withConfig(configuration) {
ast(groovy.transform.TypeChecked)
}
使用groovy
命令行选项运行groovyc
或-configscript
:
groovyc -configscript config.groovy MyClass.groovy
Groovy手册中有更多信息:
答案 1 :(得分:3)
是否有Groovy的等价物?
不是我知道的。
我不喜欢在被咬过的时候 运行时可以检测到什么 汇编,就像传递太少 构造函数的参数。
然后Groovy可能是你错误的语言,你应该使用像Java或C#这样的东西。或者,有一个版本的Groovy,称为Groovy ++,它具有更强大的类型检查功能,但我不认为它足够成熟以供生产使用。
IntelliJ(可能还有其他IDE)提供了很多关于狡猾的Groovy代码的警告。虽然这些警告不会阻止编译,但它们几乎可以为您提供两全其美的优势,即静态语言的安全性和动态语言的灵活性
答案 2 :(得分:0)
不,没有这样的东西,也没有。 Perl的“use strict”只能阻止使用未声明的变量(以及一些我认为在Groovy中没有等效的Perl特定的东西)。
在像Groovy这样的动态语言中,“向构造函数传递的参数太少”基本上不是编译器可以检测到的,因为类定义可以在运行时通过元编程来改变。此外,您通常没有必要的类型信息来了解要查看的类。
如果需要最大的编译时检查,请使用不带元编程的静态类型语言,即Java。