在groovy中这个方法的返回类型是什么?

时间:2013-05-02 15:39:22

标签: grails groovy

我有一个这样的方法:

def getInformation ()  {

  return [true, "reason why"]
}

我正在使用这个

def (isClear, reason) = getInformation()

是否可以为此方法定义返回类型,以便在有人通过该方法时更好地阅读?

4 个答案:

答案 0 :(得分:21)

此方法的实际返回类型是Object,因为您使用'def'声明它。这意味着无论您实际返回的对象是什么,它都可以返回任何内容。

以下代码同样有效:

def getInformation ()  {    
  return "this is some information"
}

def getInformation ()  {    
  return 42
}

但该方法的返回类型没有改变。

这里真正的问题是:你为什么选择这样的方法?在我看来,以下内容会使事情变得更加清晰:

Result getInformation() {
     return new Result(success: true, reason: "why")
}

这会让调用者更加清楚,你唯一需要创建的就是一个简单的类:

class Result {
     boolean success
     String reason
}

现在你已经有了一个明确定义的API。我永远不会在方法签名中使用def,因为你在这里面临的问题。

答案 1 :(得分:7)

返回类型将是List,更确切地说是ArrayList,其中包含两个Boolean类型的元素,String

由于泛型List只能是单一类型(在本例中为Object),因此无法定义多种返回类型。

答案 2 :(得分:6)

安东尼,在你的情况下更好地返回地图[isClear:true, reason:"reason why"]。然后在你的代码中获取值:

Map getInformation ()  {
  return [isClear:true, reason:"reason why"]
}
...
def result =  getInformation ()
if(result.isClear){
   ...
   result.reason
   ...
}

答案 3 :(得分:3)

  

是否可以为此方法定义返回类型,以便在有人通过该方法时更好地阅读?

不是真的,你可以改成它,但它并没有好多少:

List getInformation ()  {
  return [true, "reason why"]
}

但是,您可以定义分配了返回值的变量类型,这使得代码的这一部分更具可读性。

def getInformation ()  {    
  return [true, "reason why"]
}

def (boolean isClear, String reason) = getInformation()