2015-04-15 2 views
1

У меня есть следующий тест JUnit:Groovy Атрибут должен иметь тип «java.lang.Integer», но нашел типа «java.lang.Object»

public class JavaTest { 

    final int value = 2; 

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

@Repeat аннотацию исходят от easytest-core и точного определение - here.

Когда я компилирую это как источник java, все строит (и работает) отлично. Когда я скомпилирую то же самое, что и groovy source, я получаю:

Groovy: Атрибут 'times' должен иметь тип 'java.lang.Integer'; но нашел типа «java.lang.Object» в @ org.easetech.easytest.annotation.Repeat GroovyTest.groovy

Обыскав интернетах, я нашел несколько подобных дискуссий по SO и jira.codehaus, но эти сделки с String - проблемы с GString, поэтому решения для меня не работают.

Как это исправить?

Обновления:

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

Вы пробовали 'final Integer' вместо' final int'? –

+0

@tim_yates У меня сейчас. : p Groovy сообщает о той же проблеме. Java теперь сообщает «Несоответствие типов: невозможно преобразовать из Integer в int». – SiKing

+0

, где он сообщает об этом? с 'final ...' или с 'times ='? – cfrick

ответ

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 для этого сценария.

+0

Bummer. Этот билет jira говорит * что-то * исправлено в версии 2.5.0, но Maven Central говорит, что последний выпущен - 2.4.3. – SiKing

Смежные вопросы