Null преобразуется в декомпилированный файл класса Java - PullRequest
0 голосов
/ 03 сентября 2018

Я декомпилировал один из моих файлов Java .class и увидел эту строку кода

new ResponseModel("Reset Complete", false, (LinkedHashMap)null)

Строка соответствует

new ResponseModel("Reset Complete", false, null);

Почему был приведен нулевой параметр? Это просто мой декомпилятор намекает на тип параметра?

1 Ответ

0 голосов
/ 03 сентября 2018

Представьте, что вы перегрузили метод:

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);

Поскольку этот класс может отличаться во время выполнения от класса компиляции (во время компиляции метод не может быть перегружен, но во время выполнения класс является более новой версией с перегруженным методом), компилятор делает это явным в байт-коде, чтобы предотвратить неоднозначность позже.

...