加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么我不能从另一个Groovy类实例化Groovy类?

发布时间:2020-12-14 16:21:56 所属栏目:大数据 来源:网络整理
导读:我有两节课. One.groovy: class One { One() {} def someMethod(String hey) { println(hey) }} 和Two.groovy: class Two { def one Two() { Class groovy = ((GroovyClassLoader) this.class.classLoader).parseClass("One.groovy") one = groovy.newInst
我有两节课. One.groovy:

class One {

  One() {}

  def someMethod(String hey) {
    println(hey)
  }
}

和Two.groovy:

class Two {

  def one

  Two() {
    Class groovy = ((GroovyClassLoader) this.class.classLoader).parseClass("One.groovy")
    one = groovy.newInstance()
    one.someMethod("Yo!")
  }
}

我用这样的东西实例化了两个:

GroovyClassLoader gcl = new GroovyClassLoader();
Class cl = gcl.parseClass(new File("Two.groovy"));
Object instance = cl.newInstance();

但现在我得到了groovy.lang.MissingMethodException:没有方法签名:script13561062248721121730020.someMethod()适用于参数类型:(java.lang.String)值:[Yo!]

有任何想法吗?

解决方法

看起来它是由于调用groovy类加载器方法而发生的: string one是以文本格式解析脚本.使用文件一个在这里工作:

class Two {

  def one

  Two() {
    Class groovy = ((GroovyClassLoader) this.class.classLoader).parseClass("One.groovy")
    assert groovy.superclass == Script // whoops,not what we wanted

    Class groovy2 = ((GroovyClassLoader) this.class.classLoader).parseClass new File("One.groovy")
    one = groovy2.newInstance()
    assert one.class == One // now we are talking :-)


    one.someMethod("Yo!") // prints fine

  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读