Java 在Scala中使用通用基元数组
我最近询问是否可以在Java中参数化基元数组的类型。(基本上,我有一个数组,根据一些参数,我想成为Java 在Scala中使用通用基元数组,java,arrays,scala,generics,types,Java,Arrays,Scala,Generics,Types,我最近询问是否可以在Java中参数化基元数组的类型。(基本上,我有一个数组,根据一些参数,我想成为double[]或float[]。我使用的是原语数组,而不是包装类数组(double[],float[])因为它们的内存和时间效率更高,特别是在处理大型向量运算时。答案似乎是否定的,在Java中无法做到这一点 所以,我的新问题是:我能在Scala中做到这一点吗?我知道原语是更隐蔽的,并且只在某些操作上装箱……所以如果可以将数组参数化为双精度或浮点型,并且编译器确实将它们实现为原语,那么我如何判断它们
double[]
或float[]
。我使用的是原语数组,而不是包装类数组(double[]
,float[]
)因为它们的内存和时间效率更高,特别是在处理大型向量运算时。答案似乎是否定的,在Java中无法做到这一点
所以,我的新问题是:我能在Scala中做到这一点吗?我知道原语是更隐蔽的,并且只在某些操作上装箱……所以如果可以将数组参数化为双精度或浮点型,并且编译器确实将它们实现为原语,那么我如何判断它们是否被取消装箱,或者以其他方式实现的效率较低这比我在源代码中直接使用“Find:Double,Replace:Float”要好得多。这对您有用吗
object SpecialisedArray {
def apply[@specialized(Float, Double) T: ClassTag](size: Int) = new Array[T](size)
}
你看过@specialized指令了吗?这可能会有帮助,谢谢,我会试试看。