#scala #compiler-warnings #type-erasure
#scala #предупреждения компилятора #удаление типа
Вопрос:
Следующее определение не вызывает никаких предупреждений в scala 2.10.4:
class NoWarning[T] {
def f: PartialFunction[Any, T] = { case x: List[T] => x.head }
}
Однако это происходит (как и ожидалось) в scala 2.10.4, но не в 2.11.1:
class WithWarning {
def f[T]: PartialFunction[Any, T] = { case x: List[T] => x.head }
}
- Почему первое определение вообще не вызывает предупреждения?
- Почему второе определение не вызывает предупреждение в scala 2.11.1?
Комментарии:
1. Ни один из них не является типобезопасным, его легко получить
ClassCastException
из любого. Я думаю, что это ошибка компилятора.
Ответ №1:
Одерский объясняет разницу в сопоставлении с шаблоном в зависимости от того, относится ли параметр типа к методу или классу.
Я предполагаю, что это из-за подклассов.