查看@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
我错过了什么?
答案 0 :(得分:1)
@specialized注释添加了类的其他实现(隐藏在字节码中),这些实现是为了避免包装原始类型而实现的。就Java而言,他们使用的是int而不是Integer,因为常量的包装和展开对性能来说可能非常糟糕。
但它仍然保留了您编写的可以采用任何类型的实现。