【发布时间】:2016-03-29 09:17:58
【问题描述】:
我是 Groovy 的新手,所以我对语言的运行时绑定、类型化和非类型化属性有点困惑。我个人更喜欢声明类型。
不过,我有一个问题。
我有一个小方法,它从地图、输入等中获取一些变量,我知道这些变量是数字。假设我不知道初始类型是什么(它位于代码深处或来自外部源),除此之外它是一个数字。现在我有一个方法可以接受其中两个参数,我必须对它们进行模运算。因为它们可能是十进制或不是十进制,所以我使用 BigDecimal 的其余部分编写了一个小方法,因此为了强制执行类型,我在方法签名上使用了 BigDecimal 类型。
def callerMethod(Map map) {
...
map.each{
calledMethod(it.val1, it.val2)
...
}
...
}
def calledMethod(BigDecimal val1, BigDecimal val2) {
...
vl1.remainder(val2)
...
}
这是正确的吗?如果传入的参数是 Integer(如果我理解正确,大多数情况下原语都是装箱的),它会被隐式转换还是变成 BigDecimal?
这在 Groovy 中是如何工作的。
我仍然认为,既然我可以选择使用类型,我想使用它们而不是声明所有内容。如果您阅读已经存在的代码,它还可以更轻松地阅读代码或查看内容
【问题讨论】:
-
不要将所有内容都声明为
def...如果您知道类型,请声明类型,尤其是在您的公共接口上 -
map.each{ calledMethod(it.val1,it.val2)} 没有意义。您能否在您的问题中添加输入示例(地图?)以及输出示例?