Gradle - проект Java - универсальный для цикла - PullRequest
3 голосов
/ 26 ноября 2011

У меня есть очень простой универсальный цикл for, который вызывает проблемы при попытке построить проект с использованием gradle:

for(TaskAttribute taskAttribute:task.getAttributes())
{
...
}

Task.java

protected final Set<TaskAttribute> attributes = new HashSet<TaskAttribute>();

public Set<TaskAttribute> getAttributes(){return(attributes);}

Ошибка, которую я получаю, состоит в том, что цикл for получает Object, но требует TaskAttribute. У меня есть sourceCompatibility, установленный на 1.6. Я что-то упускаю?

Ответы [ 4 ]

0 голосов
/ 26 июня 2019

В groovy вы можете сделать петли одним из двух способов.

task forLoopTest {
    // print numbers 8 to 19 inclusive
    for (x in 8..19) {
    println 'this is run '+x
    }

    // print numbers 0 to 4 
    println 'now some groovy'
    for(int i = 0;i<5;i++) {
        println i
    }
}

Запустить на CLI:

$ gradle forLoopTest

Это должно быть положено.

this is run 8
this is run 9
this is run 10
this is run 11
this is run 12
this is run 13
this is run 14
this is run 15
this is run 16
this is run 17
this is run 18
this is run 19
0
1
2
3
4
0 голосов
/ 26 ноября 2011

Ваш код выглядит нормально. Убедитесь, что вы очистили проект и перезапустите.

0 голосов
/ 27 ноября 2011

Вероятно, происходит то, что тип task является необработанным типом класса, который является универсальным (то есть он может быть параметризован, но вы не параметризовали его).Если это так, я знаю, что по логике это не должно иметь значения для результата метода getAttributes();но использование необработанных типов «отключает» обобщения и, таким образом, говорит, что getAttributes() возвращает просто Set без его параметра, что приводит к тому, что вы получаете из него значение Object.

0 голосов
/ 26 ноября 2011

Базовая настройка для расширенного цикла for:

for(<Object_Type> <Object_Name> : <Collection_Name>)

Я не уверен, что возвращает task.getAttributes() или что такое task, но если у вас есть Коллекция (Набор) с именем attributes, вам следует просто изменить цикл на:

for(TaskAttribute taskAttribute : attributes)
{
...
}

Примечание. Поскольку это private набор, возможно, вы пытаетесь использовать его из другого класса, поэтому getAttributes() может возвращать ссылку на объект Set. В этом случае мой ответ может оказаться бесполезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...