了解使用非基元的@specialized

时间:2015-04-21 16:26:13

标签: scala

查看@specialized' docs,我看到了:

scala> class MyList[@specialized T]
defined class MyList

我的理解不完全是MyList接受通用参数T必须是原语。

scala> new MyList[Int] {}
res1: MyList[Int] = $anon$1@17884d

但是,我接着做了一个案例课。

scala> case class Zig(x: String)
defined class Zig

但是,鉴于我的上述假设,我不希望new MyList 的参数化类型为Zig

scala> new MyList[Zig]
res2: MyList[Zig] = MyList@62de73eb

我错过了什么?

1 个答案:

答案 0 :(得分:1)

@specialized注释添加了类的其他实现(隐藏在字节码中),这些实现是为了避免包装原始类型而实现的。就Java而言,他们使用的是int而不是Integer,因为常量的包装和展开对性能来说可能非常糟糕。

但它仍然保留了您编写的可以采用任何类型的实现。