Java ArrayとScala Arrayの違いは、Java Arrayはco variantです。スカラ配列はそうではありません。どちらも変更可能です。 Javaでは、sortメソッドはStringやIntの配列など、さまざまな配列を取ることができます。これは、Liskov置換原則の良い例としてよく引用されています。私には良いデザインと思われますか? Scalaでは、Arrayは共変種ではありません。 Scala ArrayはJavaよりも後に設計されています。 Scala Arrayが共分散の面でどのように優れているかはわかりません。多分これはJavaよりも優れているかもしれないというジェネリックを持っていますJava ArrayとScalaの配列
答えて
さらに見てみると、Java言語の父親は後でGenericをにしないと決めました。は共変です。それは良い理由があります。
List<Apple>
はList<Fruit>
ではないためです。そうしないと、あなたは
List<Apple> apples = new ArrayList<>();
List<Fruit> fruits = apples;
fruits.add(new Banana());
のようなものを行うことができますが、あなたは
Apple badApple = apples.get(0);
が安全の呼び出しであることを期待してwouldntは?ここで共分散を許せば、そうではありません!
そして、驚き:これはJava配列が持つ問題です!
したがって、実際にはという問題は、Java配列が共変です!そして、Scala配列が実際にあなたが "分散"を正確に制御できるようにする方が良いでしょう。 Scalaでは、分散を完全に制御できます。 Javaでは常に共変です。
共変配列を持つことは、Javaでジェネリックスを持つと思っていたずっと前に、sort(Object[] objects)
のような「汎用」メソッドを可能にする実用的な方法と見なされました。これは過去20年近くです。あなたが見ることができるように、「現代的」なやり方があります。
この決定の "コスト"は、JavaもArrayStoreExceptionを知っているという事実です。 Java配列が共変しないなら、それは必要ではありません!
Scalaジェネリックスはデフォルトでは不変であるが、必要に応じて共変または反変として宣言することもできます例えば、 'scala.collection.Iterrable'は共変です(スカラコレクションは一般に共変な傾向があります - 配列以外の例外があるかどうかわかりません)。分散の安全性は、コンパイラによってチェックされます。 –
質問がJavaのArrayに聞いていましたが、あなたの例はListでした。 – johnsam
一歩前進:「共変配列の何が問題なの?」と尋ねました。私はあなたに**共変動**の "コレクション"の実際の問題を説明しました。言い換えれば、「見て、リストにはこの問題Xがありません」。あなたは本当に私にあなたに言う必要がありますか?それは配列が非常にうまくその問題Xを持っていることを意味しますか? @Cyäeghaのコメントと一緒に、あなたは本当に必要な情報をすべて手に入れました!しかし、そうですね。私は答えを更新しました。 – GhostCat
- 1. Spra(scala)の配列[Array [Float]]にWrappedArray [WrappedArray [Float]]をキャストする方法
- 2. Matlab:assert(array)対if(配列)
- 3. ScalaのJava Collection [Int]をArray [Int]に変換する方法
- 4. Scalaの2D配列のディープコピー?
- 5. Java ArrayとArraylistのカードゲーム
- 6. ScalaのArrayとWrappedArrayの違いは何ですか
- 7. `make-array`配列に適用すると、agetはJavaオブジェクトを返します。
- 8. Weighted Arrayの結果のPHP配列
- 9. Scalaの配列は、ArrayIndexOutOfBoundsException:
- 10. Scalaの配列[タイプ]エラー
- 11. ARRAY(0x7ff4bbb0c7b8)エラー:配列のperlハッシュ
- 12. 配列$ this-> session-> arrayへのアクセス
- 13. SyntaxError:missing;文[JavaScriptのArrayにPHP配列]
- 14. ArrayリストのJava動的行列
- 15. json_decodeから配列(array())への多次元配列
- 16. 厳密なエイリアシングとstd :: arrayとCスタイルの配列
- 17. Java配列とスコープ
- 18. Java配列とnextInt();
- 19. Java配列をScalaコレクションに変換する
- 20. {} []から配列<Array<any>>
- 21. Swift Sorting Array <配列<AnyObject>>
- 22. Typescript2:Array <any>と配列<Object>の差異
- 23. Javaの動的配列? ArrayListを使用するint [] array = new int [n]
- 24. JavaとPostgreSQLの配列
- 25. クラスとメソッドのJava配列
- 26. Javaでの配列とガベージコレクション
- 27. Javaのベクトルと配列
- 28. JavaのPOSTとGET配列
- 29. スカラ座とJavaの配列
- 30. Javaクラスのコピーと配列
私が正しく理解していれば、あなた自身の質問に答えているようです... –
Scala enrichments 'Array(1,2,3).find(_ == 2)' https://github.com/ lihaoyi/fastparse/issues/126 http://docs.scala-lang.org/overviews/collections/arrays.html –