Scala - 类型参数的超类型

时间:2012-03-28 09:02:47

标签: scala types type-systems

在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的任何超类型”。

2 个答案:

答案 0 :(得分:4)

如果x可以是Type的任何超类型,那么肯定它可以是Any。这根本不是约束,你可以写x : Any

另一方面,由于类型擦除,您x.isInstanceOf[Type]将不会进行有用的检查。您无法检查类型参数。 (您必须确保在运行时可以使用类型信息。您可以使用Manifest)获取某些内容。

答案 1 :(得分:2)

试试这个:

def cast[T >: Type](x: T, errMsg: String): T = { ... }

但是,您可能想重新考虑Scala中显式类型转换的必要性。