在 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 可能 这样的事情会让你注意到这个编译时或编写时。
如果我有一个名为 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 可能 这样的事情会让你注意到这个编译时或编写时。