Да, я считаю, что для массивов должен быть определен API, отличный от того, который указан в самом языке. В частности, досадно, что Foo[]
не реализует Iterable<Foo>
. Да, я знаю, что это легко обернуть - но это раздражает, что ты должен.
.NET понимает это в основном правильно, с типом Array
, который в основном предназначен для неуниверсального доступа, и различными универсальными интерфейсами, которые, как считается, реализуются фактическими массивами. Например:
IList<int> intList = new int[10];
(Помогает, чтобы .NET-дженерики справлялись с примитивными типами лучше, чем Java.)
Единственный недостаток этого подхода, который я видел, заключается в том, что массивы могут быть ковариантными в .NET, а обычные обобщения - нет, и что некоторые вещи слегка путают с ненулевыми массивами и прямоугольными массивами.
Кроме того, разные люди называли массивы примитивами в этой теме. Хотя они, конечно, имеют особую обработку, они не определены как примитивы. Из спецификации языка , раздел 4.2 :
Тип примитива предопределен языком программирования Java и назван его
зарезервированное ключевое слово (§3.9):
PrimitiveType:
NumericType
boolean
NumericType:
IntegralType
FloatingPointType
IntegralType: one of
byte short int long char
FloatingPointType: one of
float double