在 Groovy 中保留 Class 个名称

Reserved Class Names in Groovy

如果我有一个名为 Character.groovy 的 class(没有显式构造函数)并尝试实例化它,我会收到一条消息:

groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.lang.Character()

但是如果我将 class 名称更改为 Characterr.groovy,那么我就能够实例化一个对象并按预期使用它。那么在 Groovy classes 中是否有我不能使用的保留字?如果是,为什么 Character 是其中之一?

http://groovy.codehaus.org/Reserved+Words 这些是保留关键字

http://docs.oracle.com/javase/8/docs/api/java/lang/Character.html

我认为字符是 java 中的对象包装器 class,这就是您不能使用它的原因。您不能使用自动包含在 java

中的 java classes 的任何名称

这不是一个保留的 class 名称,但是已经有一个 class 使用该名称 (java.lang.Character) 导入,因为包 java.lang 会自动导入到 java.

这种情况经常发生,特别是如果您是 java 开发人员并且不习惯使用java.io 由 groovy(例如 File)自动导入的包等(另请参阅 What packages does 1) Java and 2) Groovy automatically import?

有以下三种解决方法:

  • java 方法:用全名(即包裹和 class 名称)称呼您的 class。例如org.myrpg.Character.

  • groovy 方法:使用新名称导入 class。例如import org.myrgp.Character as RPGChar 然后使用 RPGChar 代替。

  • 禅宗方式:通常情况下,重命名您的 class 是不值得的,而且更容易。如果你被这个绊倒过一次,那么你再次被这个绊倒的可能性非常高,只有像 @CompileStatic 或 IDE 可能 这样的事情会让你注意到这个编译时或编写时。