Groovy有“使用严格”吗?

时间:2010-10-21 08:51:07

标签: groovy

我在Perl的日子里记得“use strict”语句,它会导致运行时进行额外的验证。是否有Groovy的等价物?

我不喜欢在运行时被编译时检测到的东西咬住,比如将一些参数传递给构造函数。

3 个答案:

答案 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。