这个方法在 groovy 中的返回类型是啥?
Posted
技术标签:
【中文标题】这个方法在 groovy 中的返回类型是啥?【英文标题】:What would be the return type of this method in groovy?这个方法在 groovy 中的返回类型是什么? 【发布时间】:2013-04-26 20:51:20 【问题描述】:我有这样的方法:
def getInformation ()
return [true, "reason why"]
我就是这样用的
def (isClear, reason) = getInformation()
有没有办法为这个方法定义一个返回类型,以便在有人通过该方法时更好地阅读?
【问题讨论】:
【参考方案1】:此方法的真正返回类型是 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 。
【讨论】:
我喜欢这种方法。然而,这将是我需要这个类的唯一实例。仅仅为此目的开设一个新课程似乎有点过分...... 如果我上这门课。把它放在哪里最好?有问题的功能在我的服务类中。我应该把Result
类放在src/groovy
中吗?
+1,您仍然可以通过在 Result 类中实现 getAt(Integer)
来保持相同的多重赋值语法:mrhaki.blogspot.com.br/2010/05/…
另外,这在概念上看起来更像一个元组:groovy.329449.n5.nabble.com/…
嗨 Anthony,我不知道为什么要创建一个新类。就像我说的,它让来电者更清楚。此外,您接受为正确答案的问题也不正确。您询问了方法的返回类型,它是 Object,而不是 List。我并不是说这是最好的答案,但至少它更正确:)【参考方案2】:
返回类型将是 List,更准确地说是 ArrayList,其中包含两个 Boolean、String 类型的元素
由于泛型 List 只能是单一类型(在本例中为 Object),因此您无法定义多个返回类型。
【讨论】:
【参考方案3】:Anthony,您最好返回地图[isClear:true, reason:"reason why"]
。然后在您的代码中获取值:
Map getInformation ()
return [isClear:true, reason:"reason why"]
...
def result = getInformation ()
if(result.isClear)
...
result.reason
...
【讨论】:
这段代码错误;它不运行。您指定返回一个地图,而实际上您正在返回一个列表。我为您更改了示例。【参考方案4】:有没有办法为这个方法定义一个返回类型,以便在有人通过该方法时更好地阅读?
不是真的,你可以改成这样,但也好不到哪里去:
List getInformation ()
return [true, "reason why"]
但是,您可以定义分配返回值的变量的类型,这使得该部分代码更具可读性。
def getInformation ()
return [true, "reason why"]
def (boolean isClear, String reason) = getInformation()
【讨论】:
以上是关于这个方法在 groovy 中的返回类型是啥?的主要内容,如果未能解决你的问题,请参考以下文章