Максим Федоров, сущность должна быть построена так, что любое её состояние валидно.
Сеттеры зло и должны не существовать. Иммутабельность наше всё. Логика должна быть в классах логики, какой-то User не должен её иметь вообще.
Код, таким образом, вообще неграмотный. Проверять переменную на её же тип? Парсить стрингу, чтобы проверять на ошибки, когда есть класс Uri? Заставлять пользователя ловить исключение, когда вызывающий код дает что-то не то?
Код плохой.
Александр Юдаков, Ну, я обычно пишу ответ немного шире, а не под данную конкретную проблему. Повезло, что есть такое знание, да. В следующий раз не повезет, и он же снова придет с таким же вопросом.