87

私はScalaが初めてで、楽しみのために言語を学び始めましたが、まだ頭を悩ませようとしています。Scala トレイトについての私の理解では、いくつかのメソッドが実装を持つことができることを除いて、それらは Java インターフェイスのようなものです。

Java 8 では、実装を提供できるデフォルト メソッドを持つことができるインターフェイスが追加されています。

Java 8 インターフェースと Scala トレイトの類似点と相違点は何ですか?

4

3 に答える 3

48

Java 8 のデフォルト メソッドScala トレイトの動機は異なります。

前者は、安全な API の進化と限定された形式の多重継承をサポートするために導入されました。Project Lambda で関数型プログラミングのイディオムを活用することで、たとえば、可能なすべての実装者を変更せずにインターフェースへのforEach(lambda)メソッドを追加することが有益になりましたjava.util.Collection(これは、下位互換性を壊さずに行うことは実際には不可能です)。副作用として、これはmixin 構成の形式も提供しました。

Scala トレイトは、モジュール コンポーネント構成のビルディング ブロックとしてゼロから設計されました。それらは多重継承にやさしく、線形化によるミックスインの評価順序に厳密なルールがあるため、ダイアモンドの問題はありません。それらは状態もサポートし、実装クラスを参照し、それらを混在させることができる型に制限を課すことができます。特性が徹底的に使用されている Scala コレクション ライブラリを見てください。

于 2013-05-28T12:00:54.057 に答える