Именно поэтому вы используете сеттеры, а не открываете поля объектов всему широкому миру.
Рассмотрим класс с целочисленным углом от 0 до 359 включительно.
Если вы выставите поле, вызывающие функции могут установить его так, как они захотят, и это нарушит контракт, указанный вашим API. Это также может нарушить вашу функциональность где-то в нужном направлении, потому что ваш код написан так, чтобы принять определенный диапазон для этой переменной.
С сеттером вы можете сделать несколько вещей. Один из них - вызвать исключение, чтобы указать, что было передано неверное значение, но, на мой взгляд, это было бы неправильно (в данном случае). Это может быть более полезным, если вы измените входное значение на значение от 0 до 359, например, с помощью:
actualVal = passedValue % 360;
Пока это указано в вашем интерфейсе (API), оно совершенно корректно. На самом деле, даже если вы не укажете это, вы все равно можете делать все, что захотите, так как вызывающая сторона нарушила контракт (передав значение за пределы диапазона). Я склонен следовать правилу «как можно скорее очистить ваш вклад».
В вашем конкретном случае, если вы указываете, что строка хранится в обрезанном формате, вызывающим абонентам нет причин жаловаться (вы уже заявили, что такая строка недопустима). С точки зрения размера кода (не скорости) лучше делать это в установщике, а не в каждом фрагменте кода, который вызывает установщик. Это также гарантирует, что строка хранится так, как вы этого ожидаете - нет гарантии, что вызывающая сторона не будет случайно (или целенаправленно) хранить необрезанную строку.