2017-08-12 63 views
0

ArrayBuilder没有方法定义:为什么ArrayBuilder基类不提供方法接口?

abstract class ArrayBuilder[T] extends ReusableBuilder[T, Array[T]] with Serializable 

然而,它的实现将通常与相同的接口,到通用类型参数T份额方法(以mkArray为例):

final class ofFloat extends ArrayBuilder[Float] { 

    //... 

    private def mkArray(size: Int): Array[Float] = { 
     val newelems = new Array[Float](size) 
     if (this.size > 0) Array.copy(elems, 0, newelems, 0, this.size) 
     newelems 
    } 

回答

1
  1. 在引入ClassTag之前,无法抽象创建新数组的方法“直到泛型类型参数T”;之后他们可以,但它会失去表现(在大多数情况下可能会非常轻微,但是这段代码经常被称为...)。

  2. 类型擦除与数组奇怪地交互。任何Array[T]你在ArrayBuilder[T]将最终成为Array[AnyRef]。所以如果你只有抽象方法,像ofFloat这样的类最终会有很多隐藏的转换,JIT可能会或可能不会进行优化。

相关问题