java.lang.VerifyError:对受保护数据的错误访问

时间:2015-02-27 09:36:38

标签: groovy

我有以下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)

我在这里做错了什么想法?

1 个答案:

答案 0 :(得分:1)

这实际上是Groovy中的一个错误。已提交票证:https://issues.apache.org/jira/browse/GROOVY-7325

在这种情况下的解决方法:

如果您使用的是最终HashSet<String>,然后再将其放置,则可以正常工作。由于getter基本上都会覆盖属性(如果你想确定的话,请将其设为private),它不应该损害原始代码的意图。