4

私は2つのクラスを持っています。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!")
  }
}

Two を次のようにインスタンス化します。

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

しかし今、私は得るgroovy.lang.MissingMethodException: No signature of method: script13561062248721121730020.someMethod() is applicable for argument types: (java.lang.String) values: [Yo!]

何か案は?

4

1 に答える 1

2

Groovy クラス ローダー メソッドが呼び出されたために発生しているようです。文字列 oneはスクリプトをテキスト形式で解析します。Fileここで働いたものを使用して:

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

  }
}
于 2012-12-21T16:55:21.027 に答える