我正在使用“Predic8”开发的名为“SOA-Model”的库。代码可查here .
该库的一些代码是用 Groovy 编写的,但我正在 Java 应用程序中使用该库。我正在尝试编写一个扩展“ResourceResolver”的类“ExternalResolver”。它类似于此示例代码,发现 here 。我相信可以找到 ResourceResolver 的源代码 here 。
但是,我是用 Java 编写的,如下所示:
import com.predic8.schema.Import;
import com.predic8.xml.util.ResourceResolver;
public class ExternalWSDLResolver extends ResourceResolver {
public Object resolve(Object input, String baseDir){
//some code here to do the customised resolving
}
}
现在,如果在 Eclipse 中编译,以上一切都可以正常工作。
但是,当我尝试在 IntellijIDEA 上进行编译时,它迫使我实现更多方法。本质上是实现的方法:
- implements groovy.lang.GroovyObject.invokeMethod(String s, Object o)
- implements groovy.lang.GroovyObject.getProperty(String s)
- implements groovy.lang.GroovyObject.setProperty(String s, Object o)
- implements groovy.lang.GroovyObject.getMetaClass()
- implements groovy.lang.GroovyObject.setMetaClass(MetaClass metaClass)
对于大多数人来说,我只需返回“null”就可以了。但是,如果我对 getMetaClass 执行此操作,我的代码将无法工作,并返回异常。
因此我需要知道:
- 有什么方法可以关闭 Intellij 上的这些警告吗? ...或者
- 我可以将什么放入 getMetaClass 中以使其正常工作? IE。一种默认值。
编辑:
正如评论中建议反编译ResourceResolver.class
,相应地,这里是 getMetaClass 的结果。
此外,作为引用,我已将整个输出粘贴到此处:http://pastie.org/7980007
public groovy.lang.MetaClass getMetaClass();
Code:
0: aload_0
1: getfield #27; //Field metaClass:Lgroovy/lang/MetaClass;
4: dup
5: ifnull 9
8: areturn
9: pop
10: aload_0
11: dup
12: invokevirtual #25; //Method $getStaticMetaClass:()Lgroovy/lang/MetaClass;
15: putfield #27; //Field metaClass:Lgroovy/lang/MetaClass;
18: aload_0
19: getfield #27; //Field metaClass:Lgroovy/lang/MetaClass;
22: areturn
最佳答案
作为解决方法,您可以尝试复制 GroovyObjectSupport
代码来实现这些方法,例如:
public MetaClass getMetaClass() {
if (metaClass == null) {
metaClass = InvokerHelper.getMetaClass(getClass());
}
return metaClass;
}
并在您的类中创建一个元类字段
关于Java 类扩展了 Groovy 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16777638/