Кажется, что одно отличие между Java Array и Scala Array - это Java-массив. Scala Array - нет. Оба являются изменяемыми. В java метод сортировки может принимать разные массивы, такие как массивы String или Int. Это часто цитируется как хороший пример принципа замещения Лискова. Кажется хорошим дизайном для меня? В Scala мы знаем, что Array не является совместным вариантом. Хотя Scala Array разрабатывается позже, чем Java. Я не вижу, как Scala Array лучше в аспекте со-дисперсии. У него, вообще говоря, это лучше, чем Java.Java Array vs Scala Array
ответ
Когда вы посмотрите дальше, вы обнаружите, что отцы языка Java позже решили сделать Generics не covariant. И это по уважительным причинам.
Поскольку List<Apple>
не является List<Fruit>
. В противном случае, вы могли бы сделать что-то вроде
List<Apple> apples = new ArrayList<>();
List<Fruit> fruits = apples;
fruits.add(new Banana());
но Wouldnt вы ожидаете, что
Apple badApple = apples.get(0);
безопасный вызов? Если вы допускаете ковариацию здесь, это не так!
И удивление: проблема, с которой связаны массивы Java!
Таким образом, проблема в том, что массивы Java являются ковариантными! И лучше, чтобы массивы Scala фактически позволяли вам точно контролировать свою «дисперсию». В Scala у вас есть полный контроль над дисперсией; тогда как в Java они всегда ковариантны.
Наличие ковариантных массивов рассматривалось как прагматичный способ использования «общих» методов, таких как sort(Object[] objects)
задолго до того, как кто-либо подумал о наличии дженериков в Java. Это почти 20 лет назад. «Современный» способ, как вы можете видеть: делать вещи по-другому.
«Стоимость» этого решения заключается в том, что Java также знает ArrayStoreException. Это не было бы необходимо, если бы Java-массивы не были бы ковариантными!
Стоит также отметить, что генераторы Scala по умолчанию инвариантны, но могут быть объявлены как ковариантные или контравариантные, если необходимо - например, 'scala.collection.Iterrable' является ковариантным (а коллекции Scala вообще ковариантны - я не знаю, есть ли исключения, кроме массивов?). Безопасность дисперсии проверяется компилятором. –
Вопрос задавал java Array, но ваш пример был List. – johnsam
Позволяет отступить: вы спросили: «Что не так с ковариантными массивами». Я объяснил вам фактическую проблему, которую ** имеют ковариантные ** «коллекции». Другими словами: «Посмотрите, у списков нет этой проблемы X здесь». Вам действительно нужно, чтобы я сказал вам ", и это означает, что у массивов очень хорошая проблема X" ?! Вместе с этим комментарием от @ Cyäegha вы действительно получили всю необходимую информацию! Но хорошо, кажется, так; таким образом, я обновил свой ответ. – GhostCat
- 1. Равномерность Java Array vs Array Content Equality
- 2. Array Vs Strings JAVA
- 3. Array Indices vs Array Elements
- 4. 2D Array vs Jagged array?
- 5. String vs byte array array
- 6. Subtract Array vs Add Array
- 7. $ data = array() vs unset ($ array)
- 8. Php array vs Python array
- 9. Java String vs Character Array
- 10. Java ArrayList vs Libgdx Array
- 11. Java HashSet vs Array Performance
- 12. Scala DataFrame: Explode array
- 13. Scala: fold over two-array array
- 14. Scala - convert Array [String] to Array [Double]
- 15. Scala: Array [Array [Int]] для массива [Int]
- 16. Scala: Condense Array [(String, Array [Double])] to Array [(String)]
- 17. HashTable vs. Array
- 18. Значительные различия в Array vs Array List?
- 19. bool array vs bit array в C
- 20. Arrays.stream (array) vs Arrays.asList (array) .stream()
- 21. struct array vs object array C#
- 22. malloced array VS. variable-length-array
- 23. Java Array и sub-array
- 24. JRuby Array to Java Array
- 25. Scala Array view 'flatmap'
- 26. Scala Array Тип Несоответствие
- 27. Scala: sub-array
- 28. Конструктор Scala Array?
- 29. C++ 11 std :: array vs static array vs std :: vector
- 30. Convert Array [Array [Double]] to Array [Double]
Если я правильно понял, вы, кажется, ответили на свой вопрос ... –
Scala обогащает 'Array (1,2,3) .find (_ == 2)', но также https://github.com/ lihaoyi/fastparse/issues/126 также http://docs.scala-lang.org/overviews/collections/arrays.html –