我认为这有一个简单的答案,但我的网络搜索找不到它.
如果我有以下(ideone):
def f() {}
class C
{
public h() { f() }
}
x = (new C()).h();
Run Code Online (Sandbox Code Playgroud)
此操作失败,并显示以下错误:
No signature of method: c.f() is applicable for argument types: () values: []
Run Code Online (Sandbox Code Playgroud)
我如何f()从一个方法内部调用C?
您需要引用"外部"类(它实际上不是外部类).
假设您在一个Script.groovy文件中编写代码,它会生成两个类:C.class和Script.class.没有办法C调用f()方法,因为它不知道它在何处定义.
你有一些选择:
1) @MichaelEaster的想法,给出当前范围的元类定义(即Script)
2)创建/传递一个Script对象C:
def f() { "f" }
class C
{
public h(s = new Script()) { s.f() }
}
assert "f" == new C().h()
Run Code Online (Sandbox Code Playgroud)
3)使C内部类(其也需要的一个实例Script:
class Script {
def f() { "f" }
class C
{
public h() { f() }
}
static main(args) {
assert "f" == new C(new Script()).h()
}
}
Run Code Online (Sandbox Code Playgroud)
4)静态内部类加静态f():
class Script {
static def f() { "f" }
static class C
{
public h() { f() }
}
static main(args) {
assert "f" == new C().h()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2032 次 |
| 最近记录: |