Ответ
Да, можно, если класс реализует интерфейс java.lang.Iterable<T>. Цикл for-each работает с любым объектом, предоставляющим итератор.
Требование: Класс должен реализовать метод iterator(), возвращающий объект, реализующий java.util.Iterator<T>.
Пример реализации:
import java.util.Iterator;
import java.util.List;
class CustomContainer implements Iterable<String> {
private List<String> items = List.of("First", "Second", "Third");
@Override
public Iterator<String> iterator() {
// Возвращаем итератор по внутренней коллекции
return items.iterator();
}
}
public class Main {
public static void main(String[] args) {
CustomContainer container = new CustomContainer();
for (String element : container) {
System.out.println(element); // Выведет: First, Second, Third
}
}
}
Почему это работает: Цикл for (Type var : iterable) на этапе компиляции преобразуется в вызов метода iterator() и использование методов hasNext()/next() возвращённого итератора.