Скала предполагает, что вы знаете, что делаете.В этом случае вы делаете знаете, что делаете, потому что даже если Comparator
не помечен как контравариантный, он действует так, как если бы он был (т.е. если вы можете сравнить Any
с Any
,несомненно, вы можете сравнить T
с T
для какого-то конкретного T
).
Если вы не знаете, что делаете, это может привести к ошибке времени выполнения.
Как правило, можно использовать сопоставление с образцом в случаях, подобных этому:
def cast[T](x: Any) = x match {
case t: T => t
case _ => throw new Exception
}
, и теперь вы определенно получаете предупреждение без проверки: поскольку T
стирается, совпадение не делает то, что вы думаете, оно делает.