我有一个这样的方法:
def getInformation () {
return [true, "reason why"]
}
我正在使用这个
def (isClear, reason) = getInformation()
是否可以为此方法定义返回类型,以便在有人通过该方法时更好地阅读?
答案 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()