MapがIterableではない理由(憶測)

疑問

JavaのMapはキーと値のペアの集まりであるとみなせる。
コレクション(集まり)は通常便利のためIterableを実装している。
(実際にはサブインターフェースのCollectionを実装していることが多い)
しかしMapインターフェースはIterableを継承していない。
なぜか?

憶測

憶測になるが、Mapで扱うkey-valueペアは、ユーザーからみると
MapのstaticメンバであるインターフェースMap.Entryであり、
Mapに依存しているからではないかと思った。
Map implements Iterableとしたら循環してしまうもの。
参考: Java1.4時代のMapインターフェース
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Map.html#entrySet()
ところでJava標準ライブラリにペア(直積型)がないのはなぜ?

それでもIterableにしたい

Mapを直接拡張for文で処理したい場合は
MapとIterableを継承したインターフェースを定義すればよい。
(インターフェースは多重継承OK)

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

interface IterableMap<K, V> extends Map<K, V>, Iterable<Map.Entry<K, V>> {}

public class IterableHashMap<K, V> extends HashMap<K, V> implements IterableMap<K, V> {

	private static final long serialVersionUID = 904402584765006995L;

	public static void main(String[] args) {
		IterableMap<Integer, String> map = new IterableHashMap<Integer, String>();
		map.put(1, "ichi");
		map.put(20, "nijuu");
		map.put(300, "sanbyaku");
		for (Entry<Integer, String> entry : map) {
			System.out.println(entry.getKey() + " -> " + entry.getValue());
		}
	}

	@Override
	public Iterator<java.util.Map.Entry<K, V>> iterator() {
		return entrySet().iterator();
	}
}

実行結果

1 -> ichi
20 -> nijuu
300 -> sanbyaku

問題

Mapを継承するインターフェース
(たとえばConcurrentMap, SortedMap)は当然ながらIterableを実装しない。
その場合はIterableConcurrentMap, IterableSortedMapを作るしかないのか。
ちなみに、EclipseのforeachテンプレートはEntryの型パラメータをにしてくれなかった。残念。