Scalaの抽象タイプをDRY /簡単な方法で使用する方法を理解するのは少し苦労しています。のは、私は、次があるとしましょう:クラスの定義を単純化するために、Scalaの抽象型で 'nesting'を使用できますか?
trait Product
trait Pallet[A <: Product]
class Import[
A <: Product,
B <: Pallet[A]] {
def offload(): List[A] = {
...
}
}
class Fridge extends Product
class FridgePallet extends Pallet[Fridge]
val fridges = new Import[Fridge, FridgePallet]()
これは動作しますが、それは少し冗長に感じている - コンパイラがFridgePallet
がFridge
で入力され知っていることを考えると、の必要性を取り除くためにImport
クラスのタイピングを簡略化する方法があります明示的なA <: Product
宣言?私も_
秒でA
Sを交換しようとした
class Import[B <: Pallet[A <: Product]] {
def offload(): List[A] = ...
}
val fridges = new Import[FridgePallet]()
- その後私は取得する.asInstanceOf[List[Fridge]]
キャストを使用する必要があります:私は、私は(動作しない)、次のようなものを探しています推測します型特異性はoffload()
出力に戻ります。
私は何かが分からない/わからないのですか?
感謝**アレクセイ**を - これはうまくいきます: 'offload'は' List [Fridge] 'を返します。私はあなたが正しいと信じています - ジェネリックタイプでこれを行う方法はありません。** iron9light **のハイブリッドアプローチ(ジェネリックタイプは親の特性に型メンバーを設定します)を得る方法があるかどうかはわかりません。 ... –