Представьте, что вы перегрузили метод:
public class Foo {
public void something (String s) { ... }
public void something (List l) { ... }
}
Вызов something
с аргументом null
теперь неоднозначный .
Чтобы связать вызов любого метода, вам нужно привести нулевое значение , присвоив ему тип:
new Foo().something((String)null);
new Foo().something((List)null);
Поскольку этот класс может отличаться во время выполнения от класса компиляции (во время компиляции метод не может быть перегружен, но во время выполнения класс является более новой версией с перегруженным методом), компилятор делает это явным в байт-коде, чтобы предотвратить неоднозначность позже.