Iterable - это универсальный интерфейс. Проблема, с которой вы можете столкнуться (вы на самом деле не сказали, какая у вас проблема, если есть) заключается в том, что если вы используете универсальный интерфейс / класс без указания аргументов типа, вы можете стереть типы несвязанных универсальных типов в классе. Примером этого является Неуниверсальная ссылка на универсальный класс приводит к неуниверсальным типам возвращаемых данных .
Так что я бы хотя бы изменил его на:
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
}
Без аргумента типа в Iterable итератор может быть уменьшен до типа Object, поэтому будет работать только это:
for (Object profile : m_PC) {
// do stuff
}
Это довольно неясный угловой пример дженериков Java.
Если нет, пожалуйста, предоставьте больше информации о том, что происходит.