我有以下Groovy脚本为test.groovy
:的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
类没有问题。它只是找不到静态类。
然而,这个脚本工作得很好:
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
)。
我没有测试过自己,但你试过导入静态类明确,以及在'test.groovy'为'进口静态测试.Vehicle.Deserializer'? – dmahapatro
@dmahapatro:'import test.Vehicle.Deserializer'导致第二个“无法解析类”错误,指向该行。 '输入静态test.Vehicle.Deserializer',奇怪的是,*不会*导致第二个错误,但它不会清除第一个错误。 – CommonsWare
是的,目击者也一样。在执行'test.groovy'之前,我还试图通过'groovyc'编译'Vehicle.groovy',但我仍然看到它抱怨。这可能是一个问题。 – dmahapatro