Ответ 1
Вероятно, это ошибка. SI-9188 открыт для этого.
Я понимаю, что такое стирание и почему мы сталкиваемся с непроверенными предупреждениями. Однако я не понимаю, почему в следующем случае выдается только одно непроверенное предупреждение:
class A[K] {
def receive: PartialFunction[Any, Unit] = {
case ds: List[Double] => // unchecked warning
println("* List[Double]")
case kx: Vector[K] => // no unchecked warning
println("* Vector[K]")
}
}
object TestApp extends App {
val a = new A[Int]
a.receive(List("bar"))
a.receive(Vector("foo"))
}
Оба приема вызова, к сожалению, соответствуют предложениям case. Компилятор выдал предупреждение для первого предложения:
Предупреждение: аргумент типа non-variable Двойной шаблон типа List [Double] не отмечен, поскольку он удаляется стиранием.
Я знаю, что TypeTag [T] может использоваться для обеспечения лучшей безопасности типов. Но моя озабоченность здесь заключается в том, почему для предложения второго дела не выдано безотлагательного предупреждения. Насколько мне кажется, тип аргумента K также удаляется и в соответствии с часто задаваемыми темами Java
Предупреждения"unchecked" также сообщаются, когда компилятор находит листинг, целевой тип которого является либо параметризованным типом, либо параметром типа
Так что я удивляюсь, почему нет предупреждаемого предупреждения?
Вероятно, это ошибка. SI-9188 открыт для этого.