Do y ou хотите сделать это для общего T
или для определенного? В общем случае, нет способа сделать это, принять ClassTag<T>
и TypeTag<T>
в качестве аргументов вместо этого (так же, как и код Scala). Для конкретного, я бы предложил написать обертку в Scala, например. def func_String(name: String) = func[String](name)
и называя его Java.
Или более обобщенно, но нежелательный комплекс: (. Вы можете написать эквивалент в Java, а)
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)
}
Посмотрите на http://stackoverflow.com/a/23001058/ 3314107, я думаю, это может помочь. – stefanobaghino