【发布时间】:2014-10-07 10:02:06
【问题描述】:
很明显,不能对具有抽象类型成员的方法进行参数化。但是,除了类型和实例化可以写得更短的便利问题之外,是否存在任何理由类的泛型类型参数,例如在以下抽象的 List-ArrayList 场景中:
这里,参数化是通过一个抽象类型成员来实现的:
trait base1 {
type X
def id(x: X): X
}
class extension1 extends base1 {
override def id(x: X): X = x
}
val ext1: base1 { type X = Int } = new extension1 { type X = Int }
val y1 = ext1.id(0)
这里是通过泛型类型参数实现的:
trait base2[X] {
def id(x: X): X
}
class extension2[X] extends base2[X] {
override def id(x: X): X = x
}
val ext2: base2[Int] = new extension2[Int]
val y2 = ext2.id(0)
后一种方案更方便、更易读。这本身很重要,但我对更一般的观点感兴趣,即语义。
This Martin Odersky 的采访是一个很好的介绍,但它似乎没有回答这个问题。
非常感谢您的任何提示或解释!
【问题讨论】:
-
对不起。但我不明白确切的问题。你具体问的是什么?
标签: scala generics types parameters abstract