在groovy中输入强制

Cen*_*giz 5 groovy

常规支持什么样的类型强制?我看到地图强制和封闭强制.还有别的吗?

类型强制和类型推断之间有什么区别?例如

def i = 1000 // type infere to Integer
i = 1000000000000 // type infere to Long or is this type coercion?
Run Code Online (Sandbox Code Playgroud)

Jas*_*nM1 4

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
Run Code Online (Sandbox Code Playgroud)

根据 Groovy 的文档:“ Groovy 中的闭包的工作方式类似于“方法指针”,使代码能够在稍后的时间点编写和运行”。

此外,当处理确定类型的集合时,可以推断传递给集合类型操作的闭包。

当将变量传递给不同类型的方法或比较不同类型的变量时,类型强制就会发挥作用。在比较不同类型的数字时,类型强制规则适用于在比较之前将数字转换为最大的数字类型。所以以下内容在 Groovy 中是有效的。

Byte a = 12
Double b = 10

assert a instanceof Byte
assert b instanceof Double

assert a > b
Run Code Online (Sandbox Code Playgroud)

Groovy“as”关键字用于以下情况:

  • 用于“Groovy”转换,将一种类型的值转换为另一种类型
  • 用于将闭包强制转换为单一方法接口的实现
  • 用于将 Map 强制转换为接口、抽象和/或具体类的实现

除了映射和闭包中的类型强制之外,还有“Groovy Truth”,它将表达式中的类型评估为 TRUE 或 FALSE。

  • null 为假
  • 空字符串、映射或集合为 false
  • 零数是假的
  • 如果(列表);if ( string ), if ( map ) 与 if (list != null && !list.isEmpty()) ... 相同

参考:

静态 Groovy 和并发:行动中的类型推断
http://groovy.dzone.com/articles/static-groovy-and-concurrency-3

Groovy 运算符重载
http://groovy.codehaus.org/Operator+Overloading