Это не соответствует правилу «инверсии контроля» и не является хорошей идеей.
Причина, по которой это не очень хорошая идея, заключается в том, что всякий раз, когда класс (например, ViewModel, Fragment или Activity или ...) хочет использовать retro
, он должен сам получить объект Retro, вызвав вашу первую строку (PilotApp.retro
).
Альтернатива (называемая Dependency Injection / Inversion of Dependency) состоит в том, что объект Retro передается классу (опять же, ViewModel или что-то еще), когда он инициализируется.
Причина, по которой это важно, заключается в том, что при втором подходе вы можете сделать свои классы, использующие Ретро, тестируемыми. Вы можете дать им RetroMock или TestRetro, которые делают то, что вы хотите (например, макет API для возврата ошибки).
Еще одно замечание для вашего примера: вам не нужно делать ретро-обнуляемым, вы должны сделать вашу переменную a lateinit
и сделать ее ненулевой.