Из сообщения об ошибке:
Несовместимые типы. Найдено 'null', обязательно: 'char, byte, short, int, Character, Byte, Integer, String или enum'
Вы можете видеть, что null
подразумевается ни к чему, это даже не Object
, это - это просто "нулевой тип", а не String
(или любой другой допустимый переключаемый параметр) тип).
Так что для его компиляции вам нужно привести его к String
(или к одному из других допустимых типов).
switch((String) null) {
Который затем выдает RuntimeException
при попытке выполнить его.
Это поведение применимо не только к switch
, оно фактически такое же, как когда вы делаете это:
null.isEmpty()
Откуда Java должен знать, что вы хотите вызвать String#isEmpty()
? Вы могли бы также иметь в виду Collection#isEmpty()
. Или любой другой метод isEmpty()
. То же самое относится к примеру switch
, java просто не знает, какой тип вы имеете в виду.