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

时间:2018-02-08 10:46:56

标签: grails groovy

假设我们有以下方法:

def myMethodWithParameters(param1, def param2, Object param3) {
    ...
}

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

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

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

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

1 个答案:

答案 0 :(得分:3)

快速link to the docs,它可以很好地解释这一点:

  

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

void doSomething(def param1, def param2) { }
     

体型:

void doSomething(param1, param2) { }
     

但正如我们在最后提到的那样   在文档的一部分,通常最好键入您的方法   参数,以帮助记录您的代码,也有帮助   用于代码完成的IDE,或用于利用静态类型检查的IDE   或Groovy的静态编译功能。

我跟随Groovy的一般规则是:

如果您知道您期望或返回的类型,请将该类型放在定义中。如果您只接受String,请将类型添加到参数(与返回值相同)。对于构成公共"公共"的一部分的方法,这是双倍的。 API(即:如果其他类或人员将使用该方法)。

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