从groovy方法调用顶级函数
发布时间:2020-12-14 16:25:39 所属栏目:大数据 来源:网络整理
导读:我认为这有一个简单的答案,但我的网络搜索找不到它. 如果我有以下(ideone): def f() {}class C{ public h() { f() }}x = (new C()).h(); 此操作失败,并显示以下错误: No signature of method: c.f() is applicable for argument types: () values: [] 如何
我认为这有一个简单的答案,但我的网络搜索找不到它.
如果我有以下(ideone): def f() {} class C { public h() { f() } } x = (new C()).h(); 此操作失败,并显示以下错误: No signature of method: c.f() is applicable for argument types: () values: [] 如何从C方法中调用f()? 解决方法
您需要引用“外部”类(它实际上不是外部类).
假设您在Script.groovy文件中编写代码,它会生成两个类:C.class和Script.class. C调用f()方法是没有办法的,因为它不知道它在哪里被定义. 你有一些选择: 1)@ MichaelEaster的想法,给出当前范围的元类定义(即脚本) 2)在C中创建/传递一个Script对象: def f() { "f" } class C { public h(s = new Script()) { s.f() } } assert "f" == new C().h() 3)使C成为内部类(也需要脚本实例: 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() } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |