我在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?
答案 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
注释。