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) ??? } }
免责声明:我没有编译上述,但我自己的类似的代码这样工作。