@specialized注解有什么用?
⭐️⭐️⭐️⭐️⭐️
用于特化泛型,避免装箱/拆箱以提升性能(不考虑Integer和int的内存差异),作用在泛型参数上,如:
class MyList[@specialized T]
本注解最终在编译期,会为所有primitive types的生成特化版本(此时泛型参数被移除,转而使用primitive types),
@specialized
还允许指定要特化的primitive types,如:class MyList[@specialized(Int, Double, Boolean) T]
,此时仅为Int, Double, Boolean生成特化类。本质上
@specialized
是以空间换时间,需要注意的是,不带参数的@specialized
注解默认会为所有primitive types生成特化版本(也就是下面的9个类型都会生成),所以字节码会增大数倍,通常,应该指定需要的primitive types,不要使用默认的。伴生对象Specializable中,对特化进行了分组,常见如下:
// 注意,这个group这个是默认的!!!!生成9个特化类
final val Primitives = new Group((Byte, Short, Int, Long, Char, Float, Double, Boolean, Unit))
final val Everything = new Group((Byte, Short, Int, Long, Char, Float, Double, Boolean, Unit, AnyRef))
final val Bits32AndUp = new Group((Int, Long, Float, Double))
final val Integral = new Group((Byte, Short, Int, Long, Char))
final val AllNumeric = new Group((Byte, Short, Int, Long, Char, Float, Double))
final val BestOfBreed = new Group((Int, Double, Boolean, Unit, AnyRef))
答到1及格,答完满分
Last updated
Was this helpful?