我有以下Groovy脚本test.groovy
:
import test.Vehicle
def ok=new Vehicle();
def test=new Vehicle.Deserializer();
println "Hello, world!"
而且,我有code/test/Vehicle.groovy
,具有以下类定义:
package test;
public class Vehicle {
public static class Deserializer {
}
}
但是,以下命令失败:
groovy -cp code/ test.groovy
(groovy -v
报告2.4.7)
我希望它能成功并打印出“Hello,world”。相反,我得到:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/tmp/test.groovy: 4: unable to resolve class Vehicle.Deserializer
@ line 4, column 10.
def test=new Vehicle.Deserializer();
^
1 error
由于脚本在前一行没有失败,所以Groovy正在查找Vehicle
类没有问题。它只是找不到Deserializer
静态类。
但是,这个脚本运行得很好:
public class Vehicle {
public static class Deserializer {
}
}
def ok=new Vehicle();
def test=new Vehicle.Deserializer();
println "Hello, world!"
当静态类(及其外部类)在单独的Groovy文件中定义时,是否需要做一些事情来允许Groovy使用静态类?
更新:我找到this issue并且可以确认Groovy至少可以看到Deserializer
类:
import test.Vehicle;
import static test.Vehicle.Deserializer;
println Deserializer.class.name
def ok=new Vehicle();
// def test=new Vehicle.Deserializer();
println "Hello, world!"
这可以按预期工作:
test.Vehicle$Deserializer
Hello, world!
但是,取消注释def test=new Vehicle.Deserializer();
仍然会给我带来错误,将其更改为def test=new Deserializer();
(给定import static
)。
答案 0 :(得分:1)
看起来这是a known Groovy bug。如果静态类具有零参数构造函数,则可以通过newInstance()
:
import test.Vehicle;
import static test.Vehicle.Deserializer;
def ok=new Vehicle();
def test=Deserializer.class.newInstance();
println "Hello, world!"