2010-02-22 24 views
15

¿Admite Java las propiedades de forma nativa, como C#? ¿O al codificar en Java, cuando intentas encapsular variables, estás obligado a hacerlo por getVariable() y setVariable() como métodos?Propiedades similares a Java y C#

Gracias

Respuesta

18

Sin

Usted no tiene el concepto de propiedades en el lenguaje Java. Necesita utilizar getters y setters ...

+2

Casi: no tiene soporte de nivel de idioma, pero las propiedades son un concepto bien definido en la especificación Java beans y se definen a través de sus getters/setters. –

+2

Gracias por agregar esto, pero asumí que estábamos hablando sobre el lenguaje de Jave en esta pregunta. – stiank81

+1

Y estoy de acuerdo con esa suposición. Pero aún así, me gustaría evitar dar la impresión de que no hay nada como las propiedades en todo Java (la plataforma). Si bien Java (el idioma) no lo admite, no es algo desconocido en la plataforma. –

2

La última vez que revisé, Java no era compatible con las propiedades.

4

Java no es compatible con las propiedades tipo C#. Necesita getters y setters, pero tenga cuidado de no otorgar accidentalmente acceso de usuario a los datos encapsulados al devolver una referencia al objeto en lugar de una referencia a una copia del mismo.

+0

su defensa de esto: objeto x = something.getX(); if (x.equals (something.getX())) { // No puede suceder } – brian

+0

Hmm, ya veo. Entonces, ¿siempre debo hacer copias profundas de las variables cuando regreso de un getter? –

+2

No, solo si no es seguro cambiarlo afuera. La cosa es que, para una primitiva como 'int', puedes crear un getter sin setter para proteger tu variable. Pero si devuelve un tipo de referencia (por ejemplo, una colección) de su getter, el estado interno de ese objeto puede ser manipulado fuera (algo así como member.getFriends(). Clear()) Si no puede pagar eso, devuelva una copia (o un contenedor de solo lectura). –

4

Como dijeron los demás, ninguna Java no tiene propiedades per se. El método aceptado es usar getters y setters. En una nota lateral, Delphi tiene soporte para propiedades que es muy similar a C# 's.

Definitivamente no se admite nada como AutoProperties en Java. Parece que tampoco puede encontrar ninguna mención de ningún soporte futuro para él.

0

Las propiedades de C# son similares a las propiedades de Delphi por la sencilla razón de que se inspiraron en las propiedades Delphi. Tener una de las personas clave del equipo Delphi de Borland pasar a Microsoft y (ayudar) diseñar C tenía, por supuesto, nada que ver con eso :)

Hubo una propuesta (varias de hecho) el año pasado para agregar estilo C# propiedades a Java, pero fueron derrotados efectivamente por la comunidad como un mero azúcar sintáctico sin ningún valor agregado real.

+5

Pensé que el azúcar sintáctico era algo bueno ... –

+0

no necesariamente. Muchas cosas solo permiten más ofuscación. tbh Me gustan mucho las propiedades en C#, pero puedo ver por qué podría provocar problemas al no poder diferenciar en el código de llamada entre acceder a un miembro y su getter/setter. Si tengo una clase derivada, por ejemplo, posiblemente quiera omitir getter/setter y acceder directamente al miembro de la clase en algunas situaciones, por ejemplo en un getter o setter anulado o por motivos de rendimiento. – jwenting

+2

Parece que en muchos casos, los getters y setters simples pueden duplicar las líneas de código que las clases realmente necesitan. –

Cuestiones relacionadas