groovy 支持哪种类型的强制?我看到了地图强制和关闭强制。还有其他的吗?
类型强制和类型推断有什么区别?例如
def i = 1000 // type infere to Integer
i = 1000000000000 // type infere to Long or is this type coercion?
groovy 支持哪种类型的强制?我看到了地图强制和关闭强制。还有其他的吗?
类型强制和类型推断有什么区别?例如
def i = 1000 // type infere to Integer
i = 1000000000000 // type infere to Long or is this type coercion?
Groovy 可以使用类型在运行时分配的动态无类型变量。类型推断是指自动推断出表达式的类型。
在您的示例中:def i = 1000
将 java.lang.Integer 的实例分配给变量
几个简单的测试作为例子:
assert "Integer" == 1000.class.simpleName
assert "Long" == 1000000000000.class.simpleName
assert "BigDecimal" == 3.14159.class.simpleName
assert "Float" == 3.14159f.class.simpleName
根据 Groovy 的文档:“Groovy中的闭包的工作方式类似于“方法指针”,使代码能够在以后的某个时间点编写和运行”。
此外,在处理确定类型的集合时,可以推断传递给对集合类型的操作的闭包。
当将变量传递给不同类型的方法或比较不同类型的变量时,类型强制正在发挥作用。在比较不同类型的数字时,类型强制规则适用于在比较之前将数字转换为最大的数字类型。所以以下在 Groovy 中是有效的。
Byte a = 12
Double b = 10
assert a instanceof Byte
assert b instanceof Double
assert a > b
Groovy “as” 关键字用于以下情况:
除了映射和闭包中的类型强制之外,还有"Groovy Truth",它将表达式中的类型评估为 TRUE 或 FALSE。
参考:
静态 Groovy 和并发:实际中的类型推断
http://groovy.dzone.com/articles/static-groovy-and-concurrency-3
Groovy 运算符重载
http://groovy.codehaus.org/Operator+Overloading