Нельзя менять final-поля после создания объекта, но можно и нужно их менять (задавать им значения) во время создания объекта. Так что тут никаких проблем нет. Во время создания объекта, перед вызовом конструктора, инициализируются все поля, в том числе и данное поле id.