我正在努力了解如何尽可能以干/简单的方式使用Scala的抽象类型。比方说,我有以下几点:我可以在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
秒 - 但后来我不得不使用.asInstanceOf[List[Fridge]]
铸造得到在offload()
输出上返回类型特异性。
我在想什么/没有理解?
非常感谢** **阿列克谢 - 这工作:'卸载'返回一个'List [Fridge]'。我相信你是对的 - 没有办法用泛型来做到这一点,我不知道有一种方法可以获得** iron9light **的混合方法(泛型在父特征中设置一个类型成员)工作... – 2012-01-10 11:58:57