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

Grails 带和不带def关键字的方法参数,grails,groovy,Grails,Groovy,假设我们有以下方法: def myMethodWithParameters(param1, def param2, Object param3) { ... } 使用def关键字和使用Object作为参数类型有什么区别? 在参数中使用def关键字和不使用任何类型/关键字有什么区别? 到目前为止,我所知道的并不能完全回答这个问题: def关键字用于允许动态类型。 因此,您甚至可以在其中放置一个对象[] def关键字可用于使变量仅在当前范围内可用,而不是全局可用 Quick很好地解释了

假设我们有以下方法:

def myMethodWithParameters(param1, def param2, Object param3) {
    ...
}
使用def关键字和使用Object作为参数类型有什么区别?

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


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

  • def
    关键字用于允许动态类型。 因此,您甚至可以在其中放置一个
    对象[]
  • def
    关键字可用于使变量仅在当前范围内可用,而不是全局可用
Quick很好地解释了这一点:

使用非类型化参数定义方法时,可以使用def,但 它不是必需的,所以我们倾向于忽略它们。因此,不是:

void doSomething(def param1, def param2) { }
首选:

void doSomething(param1, param2) { }
但正如我们在上一篇文章中提到的 在文档的第节中,通常最好键入您的方法 参数,以便帮助编写代码文档,并且 用于代码完成或利用静态类型检查的IDE 或者Groovy的静态编译功能

Groovy遵循的一般规则是:

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


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

这是好消息:您缺少哪些位?第二点?@tim_yates你的最后一个链接成功了!提供完整答案,赢取carma!:)