2011-11-26 118 views
3

我有一个循环,是造成问题的一个非常简单普通的,当我尝试使用gradle这个建设项目:摇篮 - Java项目 - 通用For循环

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。我错过了别的吗?

+3

getAttributes()是如何定义的? – Osw

+0

你可以显示'getAttributes()'方法 –

+0

也许有一些与gradle的org.gradle.api.Task类冲突? 'org.gradle.api。*'可能是默认导入的(这里只是一个猜测)。 – rodion

回答

0

基本建立了增强的for循环是:

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

我不知道什么task.getAttributes()回报或什么task是的,但如果你有一个集合(集)称为attributes你应该改变你的循环到这一点:

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

注:由于这是一个private设置你可能想使用这个从另一个类,所以getAttributes()可能会被返回到参考3210对象。在这种情况下,我的答案可能没有用处。

0

你的代码看起来不错。确保清理项目并重新运行。

+3

这就是我的想法,但我仍然得到这个:警告:[选项]引导类路径没有设置与-source 1.6 /home/walterjwhite/projects/software/Java/active/task/api/comparator /src/main/java/com/walterjwhite/task/api/comparator/PriorityTaskAttributeComparator.java:39:错误:不兼容的类型 \t \t为(TaskAttribute taskAttribute:()task.getAttributes) \t \t^ 需要:TaskAttribute 发现:对象 1错误 1警告 失败:生成失败,出现异常。 – Walter

0

可能发生的情况是task的类型是一个原始类型,它是一个泛型类(即它可以被参数化,但没有参数化)。如果是这种情况,我知道逻辑上它不应该影响getAttributes()方法的结果;但使用原始类型“关闭”泛型,因此它表示getAttributes()仅返回Set,没有它的参数,这会导致您从中得到的结果为Object