あなたが必要「外部」クラス(実際には外部クラスではない)への参照。
Script.groovy
ファイルにコードを書き込むと仮定すると、C.class
とScript.class
の2つのクラスが生成されます。 C
にはf()
メソッドを呼び出す方法がありません。定義されている場所がわからないためです。現在のスコープ(つまり、Script
)
2)からメタクラスdefitionを与えるMichaelEasterのアイデア@
1)、C
内Script
オブジェクトを渡す/作成:
あなたは、いくつかのオプションがあります。
def f() { "f" }
class C
{
public h(s = new Script()) { s.f() }
}
assert "f" == new C().h()
3)メイクC
(もScript
のインスタンスを必要とする:
class Script {
def f() { "f" }
class C
{
public h() { f() }
}
static main(args) {
assert "f" == new C(new Script()).h()
}
}
4)内部クラス静的内部クラスに加えて、静的f()
:
class Script {
static def f() { "f" }
static class C
{
public h() { f() }
}
static main(args) {
assert "f" == new C().h()
}
}
プラス – Will
まあ:-) @のdmahapatroの答えは説明しました。私は電話からこの説明をすることはほとんどできないので、簡単なものを提案しました。 ;) – dmahapatro