2010-06-03 4 views
60

Les propriétés C# (je veux dire les méthodes get et set) sont une fonctionnalité très utile. est-ce que java a quelque chose de similaire aux propriétés C# aussi. Je veux dire comment nous pouvons mettre en œuvre quelque chose comme le code C# suivant en java:Est-ce que java a quelque chose de similaire aux propriétés C#?

public string Name 
{ 
    get 
    { 
     return name; 
    } 

    set 
    { 
     name = value; 
    } 
} 

vous remercie à l'avance

+2

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

+0

voir aussi 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 qui traduit les propriétés C# en Java automatiquement tandis que le code C# est porté sur Java. –

+0

En fait, vous pouvez omettre le get et set préfixes et l 'utilisation comme par exemple le nom du public String() {...} pour le getter et le nom public void (String val) {...} pour le compositeur. "set" et "get" sont conventionnels mais c'est très évident que vous définissez quand vous écrivez nom ("Lem") et obtenir la chaîne n = name(); –

Répondre

68

Non, Java n'a pas l'équivalence. Il n'a que des méthodes accesseur et mutator, des noms de fantaisie pour les méthodes getter et setter. Par exemple:

public class User { 
    private String name; 

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

Il devrait être clair que ces méthodes getter/setter ne sont pas des constructions séparées avec une syntaxe flashy comme les propriétés sont en C#.Au lieu de cela, ce ne sont que des méthodes ordinaires que nous nommons getName() et setName() et leur assignons d'agir comme des propriétés par convention plutôt que par des constructions de langage dédiées. –

+3

True, getName() sont setName() sont ainsi nommés purement par convention. On pourrait juste décider de nommer ces méthodes comme, par exemple, retrieveUserName() et assignUserName(), et ce serait juste OK. Ce type de convention est idiomatique en Java et des outils comme Eclipse IDE suivent. –

+16

Ce n'est pas ** juste ** une convention. Il existe une spécification pour accompagner Java Beans et une API qui les rend utiles. http://java.sun.com/javase/technologies/desktop/javabeans/docs/spec.html –

3

Vous pouvez simplement déclarer une variable privée et écrire les méthodes manuellement. Cependant, si vous utilisez Eclipse, vous pouvez cliquer sur une variable, sélectionnez "Source" et "Générer des getters et setters". C'est à peu près aussi pratique que les propriétés C#.

+0

NetBeans offre également une telle génération de méthode automatisée – Supuhstar

+3

Je ne dirais pas que c'est aussi pratique que C#, car j'ai tendance à renommer les propriétés et au lieu de mettre à jour le nom d'une propriété, je dois mettre à jour deux méthodes et une variable; – redsolo

24

Vous pouvez jeter un oeil à Project Lombok comme il essaie de prendre la douleur de l'écriture de code Java plaque de la chaudière. Il vous permet soit d'utiliser @Getter et annotations @Setter, qui fournira getBlah() et setBlah() méthodes:

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

Ou vous pouvez simplement utiliser @data et seront automatiquement votre hashCode(), est égal à(), toString() et les méthodes de lecture, ainsi que des setters sur les champs non-finaux:

@Data public class DataExample { 
    private String name; 
} 

problèmes que j'ai trouvé avec le projet, cependant, est qu'il est tout un peu voodoo, qui peut être rebutant , et que vous devez installer un plugin eclipse (ou quoi que ce soit) pour que la compilation automatique fonctionne.

+10

Et un autre problème est que si vous utilisez Lombok, vous n'écrivez plus de code Java portable. –

13

propriétés ne sont pas seulement pratique en termes d'écriture getters et setters encapsulé dans une unité, mais ils fournissent aussi une bonne syntaxe au point d'appel.

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

tout avec getters et setters il est généralement

Window.setTitle("New"); 
+20

Il est encore pire de faire quelque chose comme un incrément: C#: Thing.Number + = 1 Java: Thing.setNumber (Thing.getNumber() + 1) –

+3

Cela ne répond pas à la question, mais décrit simplement les différences en syntaxe. – Supuhstar

+0

Eh bien, si vous utilisiez simplement des champs publics dans Java, vous seriez capable de faire Window.Title = "New" comme dans C# - sans avoir besoin de propriétés. Je n'ai jamais tout à fait compris leur point en C# mais je les utilise quand même car ils sont pratiques. – ozzy432836

Questions connexes