按照我的理解,下面两个类的定义是相同的。那么,除了语法之外,还有什么不同呢?
abstract class Container[T] {}
class IntContainer extends Container[Int] {}
abstract class Container2 { type T }
class IntContainer2 extends Container2 { type T = Int }当我查看反编译的字节码时,我注意到第一个集合仍然有泛型(尽管IntContainer被定义为具有类型对象:public class IntContainer extends Container<Object> )。第二组没有这类信息。我以为所有的通用类型都被删除了.
使用Scala2.10-M5的PS
发布于 2012-08-04 16:19:28
抽象类型和泛型之间有明显的区别,我们总是需要记住:
现在你应该清楚地知道,这两者可以以不同的方式使用:
如果您查看另一个透视图,虽然将它作为参数传递给方法( GenericClassT和T )是一个常见的特性,但是设计一个接收ClassWithAbstractTypeT和classWithDigactType.T的方法要少见得多。事实上,除非路径相关的mehods是活动的(如果我没有错,默认情况下在2.10中是活动的),否则禁止编写类似Scala2.9中的方法。
https://stackoverflow.com/questions/11808966
复制相似问题