Scala类为types参数

我想创build一个使用scala / java的对象更新的通用方法,但我无法获得types参数的类。

这是我的代码:

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

我得到的错误是

需要T类才能find

我知道在Java中,你不能这样做,但是这可能在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而不是.erasure.runtimeClass而不是.erasure

原来的答案 –是的,你可以使用清单来做到这一点:

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

瓦西尔和马克西姆的答案帮助了我。

就个人而言,我更喜欢使用implicit语法来添加这样的参数(所提供的: ClassTag是它的缩写,所以在这里,如果别人也认为这是一个更好的方法:

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

免责声明:我没有编译上述,但我自己的类似的代码这样工作。