这个方法在 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 中的返回类型是啥?的主要内容,如果未能解决你的问题,请参考以下文章

从 Groovy 中的 Set 中提取单个值的最佳方法是啥?

C语言中的main()函数返回值是啥?

java问题 返回是Object 是啥意思

session.getAttribute()返回值是啥啊

返回模板 lambda 函数的正确方法是啥?

函数EMPTY(0)和ISNULL(0)的返回值分别是啥