Groovy属性应该具有类型' java.lang.Integer',但是找到类型' java.lang.Object'

时间:2015-04-15 22:04:47

标签: groovy annotations junit4

我有以下JUnit测试:

public class JavaTest {

    final int value = 2;

    @Test
    @Repeat(times = value)
    public void test() {
        fail("Not yet implemented");
    }
}

@Repeat注释来自easytest-core,确切定义为here

当我将其编译为java源时,所有内容都构建(并运行)。当我编译与groovy源完全相同的东西时,我得到:

  

Groovy:属性'times'应该有'java.lang.Integer'类型;但在@ org.easetech.easytest.annotation.Repeat GroovyTest.groovy

中找到了类型'java.lang.Object'

在搜索了互联网之后,我在SOjira.codehaus上发现了一些类似的讨论,但这些讨论涉及String - GString问题,所以解决方案对我不起作用。

我该如何解决这个问题?

更新

  • java.version = 1.7.0_76
  • groovy.version = 2.3.7

1 个答案:

答案 0 :(得分:1)

认为你碰到的事实是groovyc不会将最终变量视为像javac那样的内联常量

我尝试像这样更改你的int变量:

final Integer value = Integer.valueOf(2).intValue()

阻止变量被视为内联常量。在更改之后,我从@Repeat注释中得到了编译错误:

  

预期Integer.valueOf(2).intValue()为内联常量

看起来Groovy JIRA中存在一些不一致的确认:http://jira.codehaus.org/browse/GROOVY-1628

此SO线程中还有一些进一步的讨论: Does it make sense to mark variable as final in groovy?

看起来你看起来不太适合这种情况下的Java行为。