@specialized注解有什么用?

⭐️⭐️⭐️⭐️⭐️

  1. 用于特化泛型,避免装箱/拆箱以提升性能(不考虑Integer和int的内存差异),作用在泛型参数上,如:class MyList[@specialized T]

  2. 本注解最终在编译期,会为所有primitive types的生成特化版本(此时泛型参数被移除,转而使用primitive types),@specialized还允许指定要特化的primitive types,如:class MyList[@specialized(Int, Double, Boolean) T],此时仅为Int, Double, Boolean生成特化类。

  3. 本质上@specialized是以空间换时间,需要注意的是,不带参数的@specialized注解默认会为所有primitive types生成特化版本(也就是下面的9个类型都会生成),所以字节码会增大数倍,通常,应该指定需要的primitive types,不要使用默认的。

  4. 伴生对象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