私はこのようなクラス定義しました:Scalaオブジェクト型を型パラメータに渡す方法は?
class Counta [T : TypeTag] {
--cutted--
}
をそして、私は、実行時に必要な正しいタイプで、このクラスをインスタンス化します。 私は、実行時にオブジェクトの正確な型を作成する機能を持っている:私はこのようなクラスをインスタンス化しようとすると、
def ConvertSparkTypesToScala(dataType: DataType) = {
dataType match {
case IntegerType => Int
case BooleanType => Boolean
case FloatType => Float
case DoubleType => Double
case LongType => Long
case ByteType => Byte
case ShortType => Short
}
}
は今:
val scalaType = ConvertSparkTypesToScala(dt)
println(scalaType)
val countA = new Counta[scalaType.type]
println(scalaType)
私は例外と最初のprintlnのプリントを得る:
オブジェクトscala.Int
私は、例外が発生しました:
java.lang.UnsupportedOperationExceptionが:スキーマタイプに scalaType.typeが
をサポートしていませんので、基本的に、これはあなたのコードタイプを書くように同じように動作しません。 質問は、私が可能にしたいことですか?もしそうなら、これはどのように達成できますか?
「ConvertSparkTypesToScala」では、タイプを返していないので、コンパニオンオブジェクトを返しています。実行時の情報をコンパイル時の情報に変換しようとしているようです。それはうまくいかないでしょう。 –
あなたは何をしようとしているのか分かりませんが、反射を使用しているので震えます。あなたは考えましたか?https://github.com/typelevel/frameless? – flavian