2010-06-03 14 views
60

Las propiedades C# (me refiero a los métodos get y set) son una característica muy útil. java tiene algo similar a las propiedades C# también. Me refiero a cómo podemos implementar algo como el siguiente código C# en Java:¿Java tiene algo similar a las propiedades de C#?

public string Name 
{ 
    get 
    { 
     return name; 
    } 

    set 
    { 
     name = value; 
    } 
} 

gracias de antemano

+2

Ver [getters/setters en java] (http://stackoverflow.com/questions/875033/getters-setters-in-java) –

+0

Vea también CodePorting C# 2Java Cloud-App http://codeporting.com/blog/csharp-to-java-conversion/archive/2012/05/09/migrating-c-properties-to-java-using-codeporting- c2java.html que traduce las propiedades de C# a java automáticamente mientras que el código de C# se transporta a java. –

+0

En realidad, puede omitir los prefijos get y set y usar como por ejemplo public String name() {...} para getter y public void name (String val) {...} para el setter. "set" y "get" son convencionales, pero es muy obvio que se establece cuando escribe el nombre ("Lem") y obtiene String n = name(); –

Respuesta

68

No, Java no tiene la equivalencia. Solo tiene métodos de acceso y mutador, nombres sofisticados para los métodos getter y setter. Por ejemplo:

public class User { 
    private String name; 

    public String getName() { return this.name; } 
    public void setName(String name) { this.name = name; } 
} 
+43

Debe quedar claro que estos métodos getter/setter no son construcciones separadas con sintaxis llamativa, como las propiedades están en C#.En su lugar, son simplemente métodos comunes a los que llamamos getName() y setName() y los procesamos actuando como propiedades por convención en lugar de a través de construcciones de lenguaje dedicadas. –

+3

Verdadero, getName() son setName() son llamados así por convención puramente. Uno podría simplemente decidir nombrar estos métodos como, por ejemplo, retrieveUserName() y assignUserName(), y eso sería simplemente correcto. Este tipo de convención es idiomático en Java y las herramientas como Eclipse IDE siguen. –

+16

No es ** solo ** una convención. Hay una especificación para ir junto con Java Beans y una API que los hace útiles. http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html –

3

Puede declarar una variable privada y escribir los métodos a mano. Sin embargo, si está utilizando Eclipse, puede hacer clic en una variable, seleccionar "Fuente" y "Generar getters y setters". Esto es tan conveniente como las propiedades de C#.

+0

NetBeans también ofrece dicha generación automática de métodos – Supuhstar

+3

No diría que es tan conveniente como C#, porque tiendo a cambiar el nombre de las propiedades y en lugar de actualizar el nombre de una propiedad, tengo que actualizar dos métodos y una variable; – redsolo

24

Puede echarle un vistazo a Project Lombok ya que trata de quitarle el dolor a la escritura del código Java de la placa de la caldera. Se le permite a cualquiera utilizar @Getter y @Setter anotaciones, que proporcionará getBlah() y setBlah() métodos:

public class GetterSetterExample { 
    @Getter @Setter private int age = 10; 
} 

O simplemente puede usar @Data y va a aplicar automáticamente el hashCode(), es igual(), toString() y métodos de acceso, junto con los emisores de campos no finales:

@Data public class DataExample { 
    private String name; 
} 

problemas que he encontrado con el proyecto, sin embargo, es que todo es un vudú bits, que puede ser una experiencia desagradable , y que debe instalar un complemento de eclipse (o lo que sea) para que la compilación automática funcione.

+10

Y un problema adicional es que si usa Lombok, ya no está escribiendo código Java portátil. –

13

propiedades son no sólo es conveniente en términos de escritura getters y setters encapsulado en una unidad, sino que también proporcionan una buena sintaxis en el punto de llamada.

Window.Title = "New"; //which looks natural 

mientras que con getters y setters por lo general es

Window.setTitle("New"); 
+20

Es incluso peor que hacer algo así como un incremento: C#: Thing.Number + 1 = Java: Thing.setNumber (Thing.getNumber() + 1) –

+3

Esto no responde a la pregunta, sino que simplemente describe las diferencias en sintaxis – Supuhstar

+0

Bueno, si acaba de utilizar campos públicos en Java, entonces podría hacer Window.Title = "New" como en C# - sin la necesidad de propiedades. Nunca entendí bien su punto en C# pero los uso de todos modos porque son convenientes. – ozzy432836

Cuestiones relacionadas