如果我有一个名为Character.groovy的类(没有显式构造函数)并尝试实例化它,我会收到一条消息:
groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.lang.Character()
但是如果我将类名更改为Characterr.groovy,那么我可以实例化一个对象并按预期使用它。那么我在Groovy类中不能使用保留字吗?如果是这样,为什么Character是其中之一?
答案 0 :(得分:3)
它不是保留的类名,但是已经有一个具有该名称的类(java.lang.Character
)被导入,因为包java.lang
会在java中自动导入。
这种情况可能会一直发生,特别是如果您是一名Java开发人员并且不习惯于java.io
包裹等由groovy为您自动导入(例如File
)(另请参阅What packages does 1) Java and 2) Groovy automatically import?)
有三种方法:
java方式:使用全名,即包和类名称来表示您的类。例如org.myrpg.Character
。
groovy方式:使用新名称导入类。例如import org.myrgp.Character as RPGChar
然后使用RPGChar
代替。{/ p>
zen方式:通常情况下,不值得使用hastle并且更容易重命名。如果你曾经绊过这一次,那么你再次绊倒这个机会非常高,只有像@CompileStatic
或IDE 这样的东西可以在编译时或在编写时注意到这一点。
答案 1 :(得分:1)
http://groovy.codehaus.org/Reserved+Words 这些是保留的关键字
http://docs.oracle.com/javase/8/docs/api/java/lang/Character.html
我相信的字符是java中的对象包装类,这就是为什么你不能使用它。您不能使用java中自动包含的任何java类名称