Variable[A]
オブジェクトをどこにキャストするのに問題がありますA <: Array[_]
データを比較manifest
して、適切な型の配列にキャストする関数を作成します。
私のオブジェクトはaをdefにVariable[A]
保存しますManifest[A]
'type'
私は既存のソフトウェアのプラグインを作成しているので、これVariable
を良いタイプでインスタンス化するのは私ではありません。
プロトタイプオブジェクトとクラス:
object Prototype {
def apply[T](n: String)(implicit t: Manifest[T]) = new Prototype[T] {
val name = n
val `type` = t
}
}
trait Prototype[T] {
def name: String
def `type`: Manifest[T]
}
変数オブジェクトとクラス:
object Variable {
def apply[T](p: Prototype[T], v: T) = new Variable[T] {
val prototype = p
val value = v
}
}
trait Variable[T] {
def prototype: Prototype[T]
def value: T
}
使用する私のクラス:
class XYDataReader[A <: Array[_]](var data: Iterable[Variable[A]]) {
def get[T](variable: Variable[A])(implicit m: Manifest[T]): Option[T] = {
if (variable.prototype.`type` <:< m) {
Some(variable.value.asInstanceOf[T])
} else {
None
}
}
}
比較に使用されるVariableオブジェクトをインスタンス化するときに、おそらく私の部分の間違いがあるので、インスタンス化のコードも提供します。
val v:List[Any] = List[Any](1.2,2,3)
val p = Prototype[Array[Any]]("col1")
val myVariable = Variable(p, v.toArray(ClassTag(p.`type`.runtimeClass)))
を含むget[Array[Double]](myVariable)
場所を呼び出すと、パターンマッチングが失敗した理由がわかりませんmyVariable.value
Array[Double]
私println()
が2つのマニフェストのとき:
- 可変配列型:
Array[double]
- mタイプ:
Array[Double]
Array[Double]
ではないようですがArray[double]
、どうすればこれを解決/キャストできますか?