当我尝试在Eclipse中运行我的groovy脚本时,我得到一个强制转换异常,如:
org.codehaus.groovy.runtime.typehandling.GroovyCastException:无法转换对象" package.Config@6babd36b'与class' package.Config'上课' package.Config'
当我使用Config as parameter
实例化另一个对象时发生异常。
clazz.newInstance(config: config)
对我来说,这似乎很奇怪。但也许有人可以给我一个解释?
答案 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中参数选项卡中的类路径中删除源。