我在Scala 2.8.1标准库的源代码中搜索了@specialized
的使用。看起来只有少数特征和类使用此注释:Function0
,Function1
,Function2
,Tuple1
,Tuple2
,Product1
,Product2
,AbstractFunction0
,AbstractFunction1
,AbstractFunction2
。
集合类都不是@specialized
。为什么不?这会产生太多的类吗?
这意味着使用具有原始类型的集合类的效率非常低,因为会发生很多不必要的装箱和拆箱操作。
避免产生装箱和拆箱的不可变的IndexedSeq
列表或序列(具有Int
特性)的最有效方法是什么?
最佳答案
特化在类的大小上付出了高昂的代价,因此必须仔细考虑添加它。我认为在收藏的特殊情况下,影响将是巨大的。
尽管如此,这仍是持续的工作-Scala库才刚刚开始专门化。