A faire Vous voulez le faire pour T
générique ou pour un spécifique? Pour générique, il n'y a aucun moyen de le faire, accepter ClassTag<T>
et TypeTag<T>
comme arguments à la place (tout comme le code Scala fait réellement). Pour plus précis, je suggère d'écrire un emballage dans Scala, par exemple. def func_String(name: String) = func[String](name)
et en l'appelant depuis Java.
Ou plus génériquement, mais complexe non souhaitable: (. Vous pouvez écrire l'équivalent en Java ainsi)
import scala.reflect.ClassTag
import scala.reflect.runtime.universe._
def func1[T](name: String, clazz: Class[T]) = {
val classTag = ClassTag[T](clazz)
val m = runtimeMirror(clazz.getClassLoader)
val tpe = m.classSymbol(clazz).toType
val typeCreator = new scala.reflect.api.TypeCreator {
def apply[U <: Universe with Singleton](m1: scala.reflect.api.Mirror[U]): U # Type =
if (m1 != m) throw new RuntimeException("wrong mirror") else tpe.asInstanceOf[U#Type]
}
val typeTag = TypeTag[T](m, typeCreator)
func(name)(typeTag, classTag)
}
Jetez un oeil à http://stackoverflow.com/a/23001058/ 3314107, je pense que cela peut être utile. – stefanobaghino