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