Java es un estándar, no solo una implementación. Diferentes proveedores pueden licenciar e implementar Java de forma diferente, siempre que se adhieran al estándar. Al hacer la llamada estándar para un campo, eso limita la implementación bastante severamente, sin una buena razón.
También un método es mucho más flexible en términos del futuro de una clase. Casi nunca se hace, excepto en algunas clases muy tempranas de Java, para exponer una constante final como un campo que puede tener un valor diferente con cada instancia de la clase, más que como un método.
El método length()
bien predates la interfaz CharSequence, probablemente desde su primera versión. Mira qué bien funcionó. Años más tarde, sin ninguna pérdida de compatibilidad con versiones anteriores, se presentó la interfaz CharSequence y encajó muy bien. Esto no hubiera sido posible con un campo.
Así que realmente invierta la pregunta (que es lo que debe hacer cuando diseña una clase que permanecerá sin cambios durante décadas): ¿Qué gana un campo aquí, por qué no simplemente convertirlo en un método?
¿Por qué no miras la fuente y lo averiguas? – skaffman
¿Qué beneficio obtendría si fuera un campo? Por el contrario, ¿por qué no preguntaste por qué las matrices tienen un campo 'length' en lugar de un método' length() '? – erickson
Las clases que se remontan a las primeras versiones del JDK no muestran mucha consistencia: las cadenas tienen un método 'length()', las matrices tienen un campo, Collections tiene 'size()', ni exponen los getters JavaBeans para éstas (mientras que DOM 'NodeList' sí lo hace). Apuntaría esto a una verruga de diseño preservada por el bien de la compatibilidad, pero realmente no puede respaldar la opinión con nada. – millimoose