1. ホーム
  2. scala

[解決済み] Scala 型パラメーターの classOf

2023-07-06 21:22:46

質問

scala / javaを使用してオブジェクトの更新のための汎用メソッドを作成しようとしていますが、型パラメータのためのクラスを取得することができません。

以下は私のコードです。

object WorkUnitController extends Controller {     
 def updateObject[T](toUpdate: T, body: JsonObject){
  val source = gson.fromJson(body, classOf[T]);
  ...
 }
}

エラーは

クラスタイプは必要ですが、Tが見つかりました。

javaでできないのは知っていますが、scalaでは全くできないのでしょうか?

ありがとうございます!

どのように解決するのですか?

原因 マニフェスト 非推奨 (Scala 2.10.0以降)これは更新された回答です。

import scala.reflect.ClassTag
import scala.reflect._

object WorkUnitController extends Controller {
  def updateObject[T: ClassTag](toUpdate: T, body: JsonObject){
    val source = gson.fromJson(body, classTag[T].runtimeClass)
    ???
  }
}

を使用する必要があります。 ClassTag の代わりに ClassManifest であり .runtimeClass の代わりに .erasure

オリジナルの回答 はい、マニフェストを使用してそれを行うことができます。

object WorkUnitController extends Controller {     
 def updateObject[T: ClassManifest](toUpdate: T, body: JsonObject){
  val source = gson.fromJson(body, classManifest[T].erasure);
  ...
 }
}