@nlog

Стоит ли реализовывать Iterable?

Является ли реализация интерфейса java.lang.Iterable классом, имеющим поле-коллекцию, хорошей практикой?
Пример:
class A {
	private int id;
	private String name;
	
	public A(int id, String name) {
		this.id = id;
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	// getters
	// setters
}

class B implements Iterable<A> {
	private String name;
	private final List<A> list;
	
	public B() {
		list = new ArrayList<A>();
	}
	
	public void addA(A a) {
		list.add(a);
	}
	
	@Override
	public Iterator<A> iterator() {
		return list.iterator();
	}
}
// использование
B b = new B();
b.addA(new A(1, "First"));
b.addA(new A(2, "Second"));
for (A a : b) {
	System.out.println(a.getName());
}

В данном случае пользователи класса B не имеют возможности напрямую взаимодействовать с его внутренним списком А. Однако, при этом класс B перестаёт быть POJO, и его использование в JSP, ORM и т.п. будет под вопросом.
В каких случаях реализация java.lang.Iterable допустима, а в каких лучше от неё отказаться?
  • Вопрос задан
  • 2295 просмотров
Пригласить эксперта
Ответы на вопрос 1
@asd111
На мой взгляд в данном простом случае можно обойтись обычным геттером

class B {
  private String name;
  private final List<A> list;
  
  public B() {
    list = new ArrayList<A>();
  }
  
  public void addA(A a) {
    list.add(a);
  }
  

  public List<A> getListOfA {
    return this.list;
  }
}
// использование
B b = new B();
b.addA(new A(1, "First"));
b.addA(new A(2, "Second"));
for (A a : b.getListOfA()) {
  System.out.println(a.getName());
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы