2011-07-29 7 views

Respuesta

11

String implementa la interfaz CharSequence, que a su vez define el método length. No podría hacer lo mismo con las variables ya que las variables no pueden ser abstractas o anuladas.
Como dicen otras personas, Java usa interfaces de forma exhaustiva.

+0

+1 Buen punto ... – Daniel

6

Porque tener acceso a la variable le permitirá modificarlo, y para romper la cadena.

y el compilador JIT es inteligente suficiente como para inline del captador para usted, por lo que efectivamente se acaba accediendo solamente la variable de todos modos.

Ah, y array.length no es una variable de objeto "real", sino más bien una característica de idioma, que le permite acceder a la longitud de la matriz. Debido a esto, no se puede escribir. Las cadenas, por otro lado, son objetos "normales", y no se manejan de manera especial sea el compilador (aunque se construyen algo sobre la marcha cuando se utilizan literales de cadena en el código fuente).

+4

pero puede ser una variable final ¿verdad? – Reddy

+0

Buen punto. Rinde mi respuesta inútil :). – Daniel

+0

si mira la fuente, length() solo devuelve el recuento int final. No habría peligro de exponerlo ya que es definitivo. Creo que la respuesta de Nikita es más precisa. –

1

Me parece que es sólo convención de java, que todos los miembros deben ser privados y sólo deben ser accesibles a través de los captadores y definidores. El problema es que si haces que Length sea público, puedes modificarlo y hacerlo inválido (no sé por qué lo harías, pero quién sabe).

C# cambia esto al permitirle crear propiedades con diferente accesibilidad para get y set, por lo que está permitido (en C# como mínimo).

1

es porque un String es un objeto. Y los objetos generalmente tienen métodos en lugar de atributos.

Si el atributo era public, también se puede modificarlo y que probablemente romper cosas.

2

Para encapsular.

Es una buena práctica tener una separación entre el API pública y los detalles de implementación. El uso de métodos (en lugar de acceder a las variables internas directamente) encapsula la implementación, lo que permite que se modifique en cualquier momento sin afectar a ningún código que ya se haya escrito.

1

No es porque sea inmutable. Incluso si fuera mutable, podrían devolver un final length. La respuesta real es probablemente la supervisión.

Cuestiones relacionadas