我有以下Groovy文件“test.groovy”:
import groovy.transform.CompileStatic
@CompileStatic
class Test {
final Set<String> HISTORY = [] as HashSet
Set<String> getHistory() {
return HISTORY.clone() as HashSet<String>
}
}
Test test = new Test()
println test.history
使用Groovy 2.4.1编译它可以正常工作,但是,当我运行“groovy test.class”时,我收到以下错误:
Caught: java.lang.VerifyError:
(class: Test, method: getHistory signature:()Ljava/util/Set;)
Bad access to protected data
java.lang.VerifyError:
(class: Test, method: getHistory
signature: ()Ljava/util/Set;)
Bad access to protected data
at test.run(test.groovy:12)
我在这里做错了什么想法?
答案 0 :(得分:1)
这实际上是Groovy中的一个错误。已提交票证:https://issues.apache.org/jira/browse/GROOVY-7325
在这种情况下的解决方法:
如果您使用的是最终HashSet<String>
,然后再将其放置,则可以正常工作。由于getter基本上都会覆盖属性(如果你想确定的话,请将其设为private
),它不应该损害原始代码的意图。