Groovy无法解析静态类

时间:2016-11-29 18:55:57

标签: groovy

我有以下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)。

1 个答案:

答案 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!"