Максим Федоров, сущность должна быть построена так, что любое её состояние валидно.
Сеттеры зло и должны не существовать. Иммутабельность наше всё. Логика должна быть в классах логики, какой-то User не должен её иметь вообще.
Код, таким образом, вообще неграмотный. Проверять переменную на её же тип? Парсить стрингу, чтобы проверять на ошибки, когда есть класс Uri? Заставлять пользователя ловить исключение, когда вызывающий код дает что-то не то?
Код плохой.
Александр Юдаков, Ну, я обычно пишу ответ немного шире, а не под данную конкретную проблему. Повезло, что есть такое знание, да. В следующий раз не повезет, и он же снова придет с таким же вопросом.
Николай Алексеев, насколько я знаю, там у них открыт TCP сокет до сервера гугл. Живёт он где-то в Google play services. Ждут сообщения, и потом оповещают приложение. Весь смысл в том, что этим пользуются многие, а сокет один, меньше потребление ресурсов.
BTW, на современных андроидах такой бэкграунд сервис не выживет, его грохнут.
Да ну ладно вам, на фичи в мажорных версиях джавы без слез не взглянешь. Что лямбды ввели не пришей кобыле хвост, что switch-expression, что аналог смарткастов... Котлин в этом плане в разы продуманный и красивей.
В kotlin native нет ручного управления памятью, зачем вы выдумываете? Там счётчик ссылок с распознаванием циклов. И область применения такая, где джава рядом не валяется.