我理解它的方式,以下两个类定义是相同的。除了语法之外,还有什么区别?
abstract class Container[T] {}
class IntContainer extends Container[Int] {}
abstract class Container2 { type T }
class IntContainer2 extends Container2 { type T = Int }
当我查看反编译的字节代码时,我注意到第一个集合仍然具有泛型(尽管IntContainer被定义为具有类型Object:public class IntContainer extends Container<Object>
)。第二组没有这样的信息。我认为所有通用类型都被删除了......
PS使用Scala 2.10-M5
答案 0 :(得分:1)
抽象类型和泛型之间存在明显的差异,我们总是需要记住:
现在应该清楚,两者可以以不同的方式使用:
如果你从另一个角度来看,虽然将GenericClass [T]和T作为参数传递给方法是一个常见的特性,但设计一个接收ClassWithAbstractTypeT和classWithAbstractType的方法却更为罕见。 T.实际上,除非路径依赖的方法处于活动状态,否则禁止对Scala 2.9中的方法进行编码(如果我没有错,则默认情况下在2.10中处于活动状态)