Program Tip

열거 형이 반복되지 않는 이유는 무엇입니까?

programtip 2020. 11. 16. 22:04
반응형

열거 형이 반복되지 않는 이유는 무엇입니까?


Java 5 이상에서는 다음을 구현하는 모든 항목에서 마술처럼 작동하는 foreach 루프가 있습니다 Iterable.

for (Object o : list) {
  doStuff(o);
}

그러나 Enumerable여전히는 구현하지 않습니다 Iterable. 즉,을 반복 Enumeration하려면 다음을 수행해야합니다.

for(; e.hasMoreElements() ;) {
  doStuff(e.nextElement());
}

Enumeration아직 구현하지 않는 이유가 있는지 아는 사람이 Iterable있습니까?

편집 : 명확하게 말하면 enum 의 언어 개념에 대해 말하는 것이 아니라 ' Enumeration ' 이라는 Java API의 Java 특정 클래스에 대해 이야기하고 있습니다.


열거 형은 구체적인 클래스가 아니기 때문에 Iterable을 지원하도록 수정되지 않았습니다 (컬렉션 인터페이스를 지원하도록 수정 된 Vector처럼).

Enumeration이 Iterable을 지원하도록 변경되면 많은 사람들의 코드가 손상됩니다.


향상된 for 루프와 함께 열거를 사용 하는 쉽고 깔끔한 방법으로 java.util.Collections.list를 사용하여 ArrayList로 변환하십시오.

for (TableColumn col : Collections.list(columnModel.getColumns()) {

(javax.swing.table.TableColumnModel.getColumns는 열거 형을 반환합니다.)

이것은 매우 약간 덜 효율적일 수 있습니다.


Enumeration을 구현하는 것은 의미가 없습니다 Iterable. Iterable에 대한 공장 방법입니다 Iterator. Enumeration과 유사 Iterator하며 단일 열거에 대한 상태 만 유지합니다.

그래서, 포장하려고 조심 Enumeration하여 AS를 Iterable. 누군가 나에게을 전달 하면 반복적으로 Iterable호출 iterator()하여 Iterator원하는만큼 인스턴스를 만들고 각각에 대해 독립적으로 반복 할 수 있다고 가정합니다 . 포장 Enumeration은이 계약을 이행하지 않습니다. 래핑 된 Enumeration코드가 자신의 코드에서 벗어나지 않도록하십시오 . (제쳐두고, 나는 자바 7 DirectoryStream이 이러한 방식으로 기대치를 위반하고 "탈출"하는 것도 허용해서는 안된다는 것을 알았다 .)

EnumerationIterator아닌 Iterable. A CollectionIterable입니다. An Iterator은 아닙니다.

당신은 이것을 할 수 없습니다 :

Vector<X> list = …
Iterator<X> i = list.iterator();
for (X x : i) {
    x.doStuff();
}

따라서 이렇게하는 것은 의미가 없습니다.

Vector<X> list = …
Enumeration<X> i = list.enumeration();
for (X x : i) {
    x.doStuff();
}

Enumerable상응하는 것은 없습니다 Iterable. for 루프에서 작업하기 위해 아무것도 끊지 않고 추가 할 수 있지만 요점은 무엇입니까? 이 새로운 Enumerable인터페이스 를 구현할 수 있다면 Iterable대신 구현하지 않는 이유는 무엇입니까?


AFAIK 열거 형은 "사용되지 않음"입니다 .

Iterator는 Java 컬렉션 프레임 워크에서 Enumeration을 대신합니다.

Enumeration 대신 Iterator를 사용하도록 JSR 315로 Servlet API를 변경하기를 바랍니다.


구문 적으로 좀 더 깔끔하게하려면 다음을 사용할 수 있습니다.

while(e.hasMoreElements()) {
  doStuff(e.nextElement());
}

참고 URL : https://stackoverflow.com/questions/27240/why-arent-enumerations-iterable

반응형