Java 类扩展了 Groovy 类

标签 java intellij-idea groovy

我正在使用“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/

相关文章:

Java 处理大量具体工厂

java - Intellij Idea IDE 对于 Android 开发是否稳定?

java - Equals 函数在 While 循环中不起作用

java - 使用随机文件访问拆分文件不起作用

java - Maven 项目可以从 Maven 命令行构建,但不能使用 IntelliJ IDEA 11.1.1

Jenkins 管道正则表达式不匹配任何东西

groovy - 在 mailgun 中使用 groovy httpbuilder 发布参数

jenkins - 在 Jenkins 管道中使用 Groovy 创建一个包含一些内容的文件

java - int[] 数组(从低到高排序)

java - 使用 Java 的默认包是一种不好的做法吗?