Пока поле является частью класса, любой может получить к нему доступ напрямую. Это может быть проблемой, когда мы пытаемся заставить всех (со) авторов пройти через геттеры / сеттеры, потому что эти методы выполняют некоторые преобразования, проверки или бухгалтерию. Как увеличение внутренних счетчиков.
Общее решение, которое приходит на ум: это возможно при использовании аннотаций. Вам нужно создать аннотацию (и код процессора аннотаций), чтобы убедиться, что это ошибка времени компиляции, если поле используется вне его метода получения / установки:
@GetterSetterAccessOnly
private int value;