我在使用@Immutability
时遇到了麻烦(或者我感到困惑)。
鉴于此课程:
@Immutable
class TestField {
String key
}
我希望我无法在像以下的实例上设置密钥:
class TestFieldSpec extends Specification {
def 'do stuff'() {
when:
def t = new TestField('a')
println t
t.key = 'b'
println t
then:
t
}
}
但是,当我运行测试时,我看不到ReadOnlyPropertyException
:
Running TestFieldSpec
TestField(a)
TestField(b)
我使用 groovy-eclipse-compiler 和 gmaven-plus 与 Maven 一起使用。 Groovy版本 2.4.7 。
如果我在两者创建的类文件上运行 javap ,我会看到:
public final void setKey(java.lang.String);
但是,当我在 GroovyConsole 中执行相同操作时,事情就会发挥作用。
@groovy.transform.Immutable
class TestField {
String key
}
def f = new TestField('a')
f.key = 'b'
产地:
抛出异常
groovy.lang.ReadOnlyPropertyException: Cannot set readonly property: key for class: TestField
at TestField.setProperty(ConsoleScript1)
at ConsoleScript1.run(ConsoleScript1:7)
在 Groovy AST浏览器中,在阶段 终结,我看不到设置器。
非常感谢任何见解。 谢谢!