Groovy脚本中的奇怪强制转换异常

时间:2014-10-16 18:24:53

标签: eclipse groovy

当我尝试在Eclipse中运行我的groovy脚本时,我得到一个强制转换异常,如:

  

org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法转换对象" package.Config@6babd36b'与class' package.Config'上课' package.Config'

当我使用Config as parameter实例化另一个对象时发生异常。

clazz.newInstance(config: config)

对我来说,这似乎很奇怪。但也许有人可以给我一个解释?

2 个答案:

答案 0 :(得分:0)

我只想为此主题添加一些信息。也许有人会发现它很有用。 我收到了同样的错误,然后尝试编译groovy脚本以便在多线程环境中使用:

 GroovyClassLoader groovyClassLoader = new GroovyClassLoader();
 Class<? extends Script> clazz = groovyClassLoader.parseClass(groovyCode);
 return clazz.newInstance();

但是默认情况下GroovyClassLoader正在使用当前线程的ClassLoader:

Thread.currentThread().getContextClassLoader())

因此,您可以拾取一个类加载器并将其用于所有线程。或者避免共享groovy东西:)

答案 1 :(得分:-1)

解决! :)

在Eclipse运行配置中,我查看了参数选项卡,发现源文件和编译的类文件都是classpath参数的一部分:

--classpath "${workspace_loc:/groovyscripts}/src/main/groovy:...
...:${workspace_loc:/groovyscripts}/classes"

上面的设置为我的配置对象(从src /加载)和目标字段(从classes /加载)提供了不同的类加载器

groovy.lang.GroovyClassLoader$InnerLoader@7a06cf15 
org.codehaus.groovy.tools.RootLoader@32728d

删除对源文件的第一个引用导致运行成功。删除后的类加载器只是RootLoader。

org.codehaus.groovy.tools.RootLoader@32728d

答案是从Eclipse中参数选项卡中的类路径中删除源。