Tablice powinny obsługiwać Iterable
, po prostu nie, z tego samego powodu, dla którego tablice .NET nie obsługują interfejsu, który umożliwia tylko losowy dostęp według pozycji (nie ma takiego interfejsu zdefiniowanego jako standard). Zasadniczo frameworki często mają irytujące małe luki, których naprawienie nie jest warte nikogo. Nie miałoby znaczenia, czy sami moglibyśmy je naprawić w optymalny sposób, ale często nie możemy.
AKTUALIZACJA: Aby być zręcznym, wspomniałem o macierzach .NET, które nie obsługują interfejsu, który obsługuje losowy dostęp według pozycji (patrz także mój komentarz). Ale w .NET 4.5 ten interfejs został zdefiniowany i jest obsługiwany przez tablice i List<T>
klasę:
IReadOnlyList<int> a = new[] {1, 2, 3, 4};
IReadOnlyList<int> b = new List<int> { 1, 2, 3, 4 };
Wszystko wciąż nie jest do końca idealne, ponieważ interfejs listy zmiennych IList<T>
nie dziedziczy IReadOnlyList<T>
:
IList<int> c = new List<int> { 1, 2, 3, 4 };
IReadOnlyList<int> d = c; // error
Być może istnieje taka gotowa kompatybilność wsteczna z taką zmianą.
Jeśli pojawią się jakieś postępy w podobnych sprawach w nowszych wersjach Javy, chciałbym wiedzieć w komentarzach! :)