显然,不能使用抽象类型成员对方法进行参数化。然而,没有任何理由的泛型类型参数存在的类除了方便的问题是类型和实例可以在下面的列表抽象,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)
后一种解决方案更方便易读。这本身很重要,但是我对更一般的观点(即语义)感兴趣。
这个采访马丁·奥德斯基是一个伟大的介绍,但它似乎并没有回答这个问题。
非常感谢您的提示或解释!
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句