我怎样才能实现Iterable接口?

给定以下代码,我如何迭代types为ProfileCollection的对象?

public class ProfileCollection implements Iterable { private ArrayList<Profile> m_Profiles; public Iterator<Profile> iterator() { Iterator<Profile> iprof = m_Profiles.iterator(); return iprof; } ... public Profile GetActiveProfile() { return (Profile)m_Profiles.get(m_ActiveProfile); } } public static void main(String[] args) { m_PC = new ProfileCollection("profiles.xml"); // properly outputs a profile: System.out.println(m_PC.GetActiveProfile()); // not actually outputting any profiles: for(Iterator i = m_PC.iterator();i.hasNext();) { System.out.println(i.next()); } // how I actually want this to work, but won't even compile: for(Profile prof: m_PC) { System.out.println(prof); } } 

Iterable是一个通用的接口。 你可能会遇到的一个问题(你没有真正说过你有什么问题),如果你使用一个通用的接口/类而不指定types参数,你可以擦除不相关的genericstypes在课堂上。 非generics引用非generics返回types中的generics类结果就是一个例子。

所以我至less会把它改成:

 public class ProfileCollection implements Iterable<Profile> { private ArrayList<Profile> m_Profiles; public Iterator<Profile> iterator() { Iterator<Profile> iprof = m_Profiles.iterator(); return iprof; } ... public Profile GetActiveProfile() { return (Profile)m_Profiles.get(m_ActiveProfile); } } 

这应该工作:

 for (Profile profile : m_PC) { // do stuff } 

如果没有Iterabletypes的参数,迭代器可能会被简化为Objecttypes,所以只有这样才能工作:

 for (Object profile : m_PC) { // do stuff } 

这是Javagenerics的一个非常晦涩的angular落案例。

如果没有,请提供更多关于正在发生的事情的信息。

首先:

 public class ProfileCollection implements Iterable<Profile> { 

第二:

 return m_Profiles.get(m_ActiveProfile);