Groovy中的接口

add*_*dd9 9 dns grails groovy interface

我即将开始一个社交网络应用程序项目.

当我在设计类时,我决定定义"可评论"或"可爱"等接口,以便在需要时使用它们.

然而,我无法弄清楚如何在Groovy中实现它,我正处于学习阶段.

以下示例来自Groovy文档,

 interface X
{ void f(); void g(int n); void h(String s, int n); }

x = [ f: {println "f called"} ] as X
x.f()
//x.g()    // NPE here
Run Code Online (Sandbox Code Playgroud)

说这是我的一个接口,我想使用一个名为B的Class来实现这个接口.

在相关的控制器中,我只能说B为X吗?

如何在域层中执行此操作?如果一个Z类,让我说"可评论",我应该创建一个名为Comment的域类,并说Z有多个评论?并使用控制器层中的接口?

什么是Groovy正确执行此操作的方法?我有点困惑,有点澄清会很好.

提前致谢

Bur*_*ith 20

您显示的示例不是在实现您自己的接口时使用的示例.这是仅部分实现接口的便捷方式.在此示例中,仅f实现了该方法,因此其他方法在您看到时失败.这对于测试具有大型接口但仅在被测试的类中调用几个方法非常有用,因此您无需实现整个接口.

您可以像在Java中一样在Groovy中实现接口:

interface Math {
   int add(int a, int b)

   int multiply(int a, int b)
}

class SimpleMathImpl implements Math {
   int add(int a, int b) {
      a + b
   }

   int multiply(int a, int b) {
      a * b
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 在Groovy(或Grails)中使用接口没什么好处,因为你可以调用你想要的任何方法 - Groovy支持"duck typing".有些插件使用它们,但实际上更像是没有方法的"标记"接口,它们只是用于对类型进行分类,因此您可以检查"instanceof MyInterface"并采取相应的行动.但除此之外,没有理由使用接口. (3认同)