Array[Byte]
のArray[T]
への変換について書いた関数には1つの問題があります。問題の機能:汎用配列を返す関数
def getPoints[T](bytes : Array[Byte]) : Array[T] = {
val byteBuffer = ByteBuffer.wrap(bytes)
byteBuffer.order(ByteOrder.LITTLE_ENDIAN)
val data = Array.ofDim[T](bytes.length/biosRecord.byteEncoding)
if(biosRecord.byteEncoding == 2) {
byteBuffer.asShortBuffer.get(data)
data
} else if(biosRecord.byteEncoding == 4) {
byteBuffer.asIntBuffer().get(data)
data
} else null
}
biosRecord
は、int型のフィールド(byteEncoding
)の場合クラスです。私はこのコードに2つの問題がある知っている
:
- 一般的な配列を返すためには、私が
Manifest
を使用する必要があります。 - 最初の
if
ブランチでは、推定されるタイプはArray[Short]
であり、2番目のタイプはArray[Int]
です。このため、汎用タイプT
を使用しようとしましたが、機能しません。
私はコンパイル時に何を得る:
[error] (x$1: Array[Short])java.nio.ShortBuffer <and>
[error] (x$1: Int)Short
[error] cannot be applied to (Array[T])
[error] byteBuffer.asShortBuffer.get(data)
[error] (x$1: Array[Int])java.nio.IntBuffer <and>
[error] (x$1: Int)Int
[error] cannot be applied to (Array[T])
[error] byteBuffer.asIntBuffer().get(data)
私はこの一般的な機能は、コンパイルさせるために何をする必要がありますか?
2つの問題があります: 'byteBuffer.asShortBuffer.get(data)'ここでgetはintまたは 'Array [Short]'を取りますが、配列は汎用で、2番目の 'ofDim'は' T 'である。 –