为什么groovy不会强迫最后的课程

时间:2016-09-26 07:36:56

标签: groovy

最近我发现Groovy不允许强制进入最后的课程。

final class Example {
    def x
}

// GroovyCastException. cannot coerce because it is final class
def a =  { x = 5 } as Example

为什么?我想这是Groovy用来胁迫类的机制吗?

2 个答案:

答案 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的变量,它被设置在其范围内,但不是某个对象的属性,可以在类型强制期间转移。