我怎样才能实现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);