考虑:
trait Base
trait Derived extends Base
class Narrow[T<:Base](arg :T) {
val d = arg match {
case derived :Derived => Some(derived)
case _ => None
}
}
在以前版本的scala(2.11.8 之前)中,我记得derived
有T with Derived
. 这有时会导致类型推断的意外行为,但提供了完整的信息。现在(在2.11.8),derived
该内case
子句类型的简单Derived
。这当然是一个简化的例子,但实际上我有一个接受 a 的方法T with Derived
,我想知道是否有可能安全地(并且没有编译器警告)获得对这样一个实例的引用?自然,
case derived :Derived with T =>
产生有关未经检查(已擦除)类型匹配的警告。
case derived: Derived with T @unchecked
作品。当然,使用@unchecked
意味着你必须确保代码是安全的,而不是编译器,但在这种情况下,我认为它和 2.11.8 之前一样安全(即由于类型擦除,客户端可以传递实际上不是的参数T
) .
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句