Java - это стандарт, а не просто реализация. Различные поставщики могут лицензировать и реализовывать Java по-разному, если они придерживаются стандарта. Посредством стандартного вызова поля это довольно жестко ограничивает реализацию без всякой веской причины.
Также метод гораздо более гибкий с точки зрения будущего класса. Почти никогда не делается, за исключением некоторых очень ранних классов Java, чтобы представить конечную константу как поле, которое может иметь различное значение для каждого экземпляра класса, а не как метод.
Метод length()
хорошо предшествует интерфейсу CharSequence, возможно, по сравнению с его первой версией. Посмотри, как хорошо это сработало. Спустя годы, без потери обратной совместимости, интерфейс CharSequence был представлен и прекрасно вписался. Это было бы невозможно с полем.
Итак, давайте по-настоящему перевернем вопрос (что вы должны делать, когда разрабатываете класс, который должен оставаться неизменным в течение десятилетий): что здесь получает поле, почему бы просто не сделать его методом?