【发布时间】:2011-07-13 23:47:16
【问题描述】:
我想编写一个转换为类型 A 的函数,其中 A 可以是例如List[Int],或更复杂的参数化类型,如 Map[Int, List[Int]]。
def castToType[A](x: Any): A = {
// throws if A is not the right type
x.asInstanceOf[A]
}
现在,由于类型擦除(我相信),即使类型不正确,代码也能正常工作。该错误仅在访问时出现,带有 ClassCastException。
val x = List(1, 2, 3)
val y = castToType[List[String]](x)
y(0) --> throws java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
有没有办法可以使用清单来使其正常工作?谢谢!
【问题讨论】:
-
您能否提供更多关于为什么需要投射的背景信息?在您的示例
val x = List(1, 2, 3)中,编译器推断List[Int],因此使用castToType 似乎毫无意义。如果您可以完全避免Any和asInstanceOf,那是最好的选择。 -
是的,基本上我的 DB/memcached 接口返回一个 Any,而且我有一个需要返回类型 R 的类型化类(参见 stackoverflow.com/questions/5985076/…)。所以我需要对让编译器高兴,但如果演员表不正确,我也希望它也能抛出。
标签: scala