Я изо всех сил пытаюсь понять, как использовать абстрактные типы в Scala как СУХОЙ / простой способ, насколько это возможно.Допустим, у меня есть следующее:
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
?Я думаю, что я ищу что-то вроде следующего (что не работает):
class Import[B <: Pallet[A <: Product]] {
def offload(): List[A] = ...
}
val fridges = new Import[FridgePallet]()
Я также пытался заменить A
s на _
s - но тогда я должениспользуйте .asInstanceOf[List[Fridge]]
casting, чтобы вернуть специфичность типа в вывод offload()
.
Что я пропускаю / не понимаю?