Question

Je suis nouveau à Java, mais ont une certaine expérience de la POO avec ActionScript 3, donc je suis en train de migrer se fondant sur des choses que je sais.

Dans ActionScript 3, vous pouvez créer des accesseurs en utilisant le get et set mots-clés, ce qui signifie que vous créez une méthode dans les données de classe et d'accès par une propriété d'une instance de cette classe. Je pourrais paraître compliqué, mais ce n'est pas. Voici un exemple:

class Dummy{

    private var _name:String;

    public function Dummy(name:String=null){
        this._name = name;
    }

    //getter
    public function get name():String{
        return _name;
    }

    //setter
    public function set name(value:String):void{
    //do some validation if necessary
        _name = value;
    }

}

Et j'accéder name dans un objet comme:

var dummy:Dummy = new Dummy("fred");
trace(dummy.name);//prints: fred
dummy.name = "lolo";//setter
trace(dummy.name);//getter

Comment puis-je faire cela en Java?

Le fait d'avoir des champs publics est hors de question. J'ai remarqué qu'il ya cette convention d'utilisation et ECRIRE devant des méthodes, que je suis OK avec.

Par exemple,

class Dummy{

    String _name;

    public void Dummy(){}

    public void Dummy(String name){
        _name = name;
    }

    public String getName(){
        return _name;
    }

    public void setName(String name){
        _name = name;
    }

}

Y at-il un équivalent d'ActionScript 3 / getter setters en Java, comme dans l'accès à un champ privé comme un champ d'une instance de la classe, mais ayant une méthode de mise en œuvre en interne que dans la classe?

Était-ce utile?

La solution

Non. getters AS3 et setters sont une chose ECMAScript. En Java, vous êtes coincé avec les fonctions de style getVal () et SEtVAL () - il n'y a pas de sucre syntaxique pour rendre les choses faciles pour vous

.

Je pense que Eclipse peut aider à générer auto-ce genre de choses si ...

Autres conseils

Votre code Java est très bien, sauf que vous, voulez faire _name privée .

Il n'y a pas get et set mots-clés en Java comme dans votre exemple AS3. Désolé, il ne va pas mieux que ce que vous faites déjà.

Correction du code:

class Dummy {
  private String _name;

  public void Dummy() {}

  public void Dummy(String name) {
    setName(name);
  }

  public String getName() {
    return _name;
  }

  public void setName(String value) {
    _name = value;
  }
}

Malheureusement, non, il n'y a pas le soutien de niveau linguistique équivalent en java.

get * et définir * motifs que sont ainsi mis en place dans la culture java que vous trouverez un fort soutien IDE pour eux (par exemple, éclipse les faire automatiquement pour vous), et si vous travaillez dans quelque chose qui utilise le langage d'expression d'abord fait pour jsps (EL), alors vous serez en mesure d'utiliser la notation de la propriété aux apporteurs d'accès et setters.

Je considère ne pas avoir le getter ou setter comme ils ne font rien dans votre cas, sauf rendre le code plus compliqué. Voici un exemple sans getters ou setters.

class Dummy {
  public String name;
  public Dummy(String name) { this.name = name; }
}

Dummy dummy = new Dummy("fred");
System.out.println(dummy.name);//getter, prints: fred
dummy.name = "lolo";//setter
System.out.println(dummy.name);//getter, prints: lolo

à mon humble avis Ne pas rendre les choses plus compliquées que vous avez besoin. Il est souvent le cas que l'ajout de la complexité souffrira de Vous-Aint-Va-Need-It

Un moyen IDE indépendant consiste à utiliser Lombok , une bibliothèque basée annotation qui génère getters, setters, et même equals() et hashcode(). Il le fait pour le compilateur, mais pas dans le fichier source, de sorte que vous ne devez pas regarder les méthodes, il suffit de les utiliser.

En Java, la seule option que vous avez sans exposer les entrailles de votre objet est de faire vos propres accesseurs que vous avez dans votre exemple.

La convention est de préfixer get ou set en face de la zone qui est en cours de modification. Alors, comme dans votre exemple, le name sur le terrain aurait des méthodes de getName et setName comme getter et setter correspondant, respectivement.

Aussi avant d'ajouter setters et getters, il pourrait être une bonne idée de vous demander pourquoi vous exposer les données internes de l'objet en question.
Je vous propose de lire cet article - http://www.javaworld.com/javaworld/ jw-09-2003 / jw-0905-toolbox.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top