使用def关键字的Groovy默认类型

时间:2016-07-07 10:59:47

标签: performance groovy

我在groovy中创建了一个简单的函数,在datetimes变量上,我有这样的行

def minutes = date.getAt(Calendar.MINUTE)

出于好奇,我已经检查了时间表现,它工作了3.5秒,输入的大小就像90k日期。只需从def更改为int,我的代码就会在2,7到2.5秒内完成。 getAt()返回int但分钟的类型为BigDecimal(在JMC中已检查)。类型推断算法在groovy中是如此糟糕,或者我没有阅读关于def关键字的教程的某些部分? 是否有任何默认类型的表在使用def时会返回groovy?

1 个答案:

答案 0 :(得分:0)

  

getAt()返回int但是分钟的类型为BigDecimal

minutes的类型是整数

def minutes = date.getAt(Calendar.MINUTE)

您可以通过在Groovy shell或控制台中运行以下内容来验证这一点

groovy:000> new Date().getAt(Calendar.MINUTE).class
===> class java.lang.Integer

getAt返回int,通过Integer调用将其自动提交至.class

  

是否有任何默认类型的表在使用def?

时会返回groovy

变量的类型不会影响方法的类型,但如果您担心Groovy的动态类型会影响代码的性能,请使用@CompileStatic注释。