带和不带 def 关键字的方法参数

Seb*_*rth 1 grails groovy

假设我们有以下方法:

def myMethodWithParameters(param1, def param2, Object param3) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

使用 def 关键字和使用 Object 作为参数类型有什么区别?

使用 def 关键字和不使用任何类型/关键字作为参数有什么区别?


到目前为止我所知道的并不能完全回答这个问题:

  • def关键字用于允许动态类型。所以你甚至可以Object[]在里面放一个。
  • def关键字可用于使变量仅在当前范围内可用,而不是全局范围内可用

tim*_*tes 5

文档的快速链接很好地解释了这一点:

\n\n
\n

当定义具有无类型参数的方法时,可以使用 def 但不需要它,因此我们倾向于省略它们。所以而不是:

\n\n
void doSomething(def param1, def param2) { }\n
Run Code Online (Sandbox Code Playgroud)\n\n

更喜欢:

\n\n
void doSomething(param1, param2) { }\n
Run Code Online (Sandbox Code Playgroud)\n\n

但正如我们在文档的最后\n部分中提到的,\xe2\x80\x99通常最好键入方法\n参数,以便帮助记录你的代码,并帮助\n IDE完成代码,或者利用 Groovy 的静态类型检查或静态编译功能。

\n
\n\n

我对 Groovy 遵循的一般规则是:

\n\n

如果您知道期望或返回什么类型,则将该类型放入定义中。如果只接受String,则将类型添加到参数中(与返回值相同)。对于构成“公共”API 一部分的方法(即:如果其他类或人员要使用该方法),这一点更加重要。

\n\n

如果它只是内部的,或者接受一系列值类型,那么将参数保留为无类型,然后让 Groovy 对其进行排序...

\n