在Scala中,我该怎么做:
def cast [Type] (x: _ >: Type, errMsg: String): Type = {
if (x.isInstanceOf[Type]) {
x.asInstanceOf[Type]
} else {
throw new Exception(errMsg)
}
}
x: _ >: Type
(Scala中不存在的符号)意思是“x的类型是Type的任何超类型”。
答案 0 :(得分:4)
如果x可以是Type
的任何超类型,那么肯定它可以是Any
。这根本不是约束,你可以写x : Any
另一方面,由于类型擦除,您x.isInstanceOf[Type]
将不会进行有用的检查。您无法检查类型参数。 (您必须确保在运行时可以使用类型信息。您可以使用Manifest
)获取某些内容。
答案 1 :(得分:2)
试试这个:
def cast[T >: Type](x: T, errMsg: String): T = { ... }
但是,您可能想重新考虑Scala中显式类型转换的必要性。