Существует общее недопонимание того, как подчеркивания работают в
case _ => throw new UnsupportedOperationException("Type not supported: " + _.getClass())
Два подчеркивания не соответствуют друг другу, вместо этого они расширены до чего-то вроде
case _ => throw new UnsupportedOperationException(x => ("Type not supported: " + x.getClass()))
то есть второе подчеркивание рассматривается как синтаксис заполнителя анонимной функции, а его область действия - первые заключающие скобки.