我有以下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'
在搜索了互联网之后,我在SO和jira.codehaus上发现了一些类似的讨论,但这些讨论涉及String - GString问题,所以解决方案对我不起作用。
我该如何解决这个问题?
更新:
答案 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行为。