最近我发现Groovy不允许强制进入最后的课程。
final class Example {
def x
}
// GroovyCastException. cannot coerce because it is final class
def a = { x = 5 } as Example
为什么?我想这是Groovy用来胁迫类的机制吗?
答案 0 :(得分:4)
您的代码,但工作将是:
@groovy.transform.ToString(includeNames=true)
final class Example {
def x
}
def a = [x:5] as Example
println a // Example(x:5)
答案 1 :(得分:0)
要添加Tim Yates发布的内容,这就是问题所在:
def a = { x = 5 } as Example
这是有效的原因:
def a = [x:5] as Example
是因为它创建了一个值为5的映射,并且Groovy运行时能够获取映射的该属性并使用相同的密钥将其分配给Example
属性。在该闭包中发生的所有事情都是一个名为X的变量,它被设置在其范围内,但不是某个对象的属性,可以在类型强制期间转移。