私はScalaが初めてで、楽しみのために言語を学び始めましたが、まだ頭を悩ませようとしています。Scala トレイトについての私の理解では、いくつかのメソッドが実装を持つことができることを除いて、それらは Java インターフェイスのようなものです。
Java 8 では、実装を提供できるデフォルト メソッドを持つことができるインターフェイスが追加されています。
Java 8 インターフェースと Scala トレイトの類似点と相違点は何ですか?
Java 8 のデフォルト メソッドとScala トレイトの動機は異なります。
前者は、安全な API の進化と限定された形式の多重継承をサポートするために導入されました。Project Lambda で関数型プログラミングのイディオムを活用することで、たとえば、可能なすべての実装者を変更せずにインターフェースへのforEach(lambda)
メソッドを追加することが有益になりましたjava.util.Collection
(これは、下位互換性を壊さずに行うことは実際には不可能です)。副作用として、これはmixin 構成の形式も提供しました。
Scala トレイトは、モジュール コンポーネント構成のビルディング ブロックとしてゼロから設計されました。それらは多重継承にやさしく、線形化によるミックスインの評価順序に厳密なルールがあるため、ダイアモンドの問題はありません。それらは状態もサポートし、実装クラスを参照し、それらを混在させることができる型に制限を課すことができます。特性が徹底的に使用されている Scala コレクション ライブラリを見てください。