Frage

Ich bin neu in Java, habe aber einige Erfahrung mit ActionScript 3, also versuche ich, mich auf Dinge zu verlassen, die ich kenne.

In ActionScript 3 können Sie Getter und Setter mit den Keywords GET and Setzen erstellen, was bedeutet, dass Sie eine Methode in der Klasse erstellen und über eine Eigenschaft einer Instanz dieser Klasse auf Daten zugreifen. Ich mag kompliziert klingen, aber es ist nicht so. Hier ist ein Beispiel:

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;
    }

}

Und ich würde zugreifen name in einem Objekt als:

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

Wie würde ich das in Java machen?

Nur einige öffentliche Felder zu haben, ist nicht in Frage. Ich habe festgestellt, dass es diese Konvention gibt, Get und Set vor Methoden zu verwenden, mit denen ich in Ordnung bin.

Zum Beispiel,

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;
    }

}

Gibt es ein Äquivalent zu ActionScript 3 Getter/Settern in Java, wie beim Zugriff auf ein privates Feld als Feld aus einer Instanz der Klasse, aber eine Methode zur Implementierung dieser intern in der Klasse?

War es hilfreich?

Lösung

Nö. AS3 Getter und Setter sind eine ECMascript -Sache. In Java stecken Sie mit den Funktionen von GetVal () und Setval () fest-es gibt keinen syntaktischen Zucker, der Ihnen die Dinge erleichtert.

Ich denke, Eclipse kann jedoch helfen, diese Arten von Dingen zu generieren ...

Andere Tipps

Ihr Java -Code ist in Ordnung, außer dass Sie es machen möchten, machen möchten _name Privatgelände.

Es gibt keine erhalten und einstellen Schlüsselwörter in Java wie in Ihrem AS3 -Beispiel. Entschuldigung, es wird nicht besser als das, was Sie bereits tun.

Korrigierter 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;
  }
}

Leider gibt es in Java nicht die äquivalente Unterstützung auf Sprachebene.

Die Muster von GET* und SET* sind in der Java -Kultur so etabliert, dass Sie eine starke IDE -Unterstützung für sie finden (z. B. Eclipse wird sie automatisch für Sie machen), und wenn Sie in etwas arbeiten, das zuerst die Ausdruckssprache verwendet Für JSPs (EL) werden Sie mit der Eigenschaftsnotation zum Zugriff auf Getter und Setter.

Ich würde in Betracht ziehen, den Getter oder Setter nicht zu haben, da er in Ihrem Fall nichts tut, außer den Code komplizierter zu machen. Hier ist ein Beispiel ohne Getter oder Setter.

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

IMHO macht die Dinge nicht komplizierter als nötig. Es ist so oft der Fall, dass das Hinzufügen von Komplexität unter leiden wird You-aint-gonna-need-it

Ein ide-unabhängiger Weg ist die Verwendung Lombok, eine annotationsbasierte Bibliothek, die Getter, Setter und sogar erzeugt equals() und hashcode(). Dies geschieht für den Compiler, aber nicht in der Quelldatei, sodass Sie sich die Methoden nicht ansehen müssen, sondern sie einfach verwenden müssen.

In Java ist die einzige Option, die Sie haben, ohne die Interna Ihres Objekts aufzudecken, darin, Ihre eigenen Getter und Setter wie in Ihrem Beispiel zu erstellen.

Die Übereinkommen soll sich vorbereiten get oder set vor dem Feld, der verändert wird. Also wie in Ihrem Beispiel das Feld name hätte getName und setName Methoden als entsprechende Getter bzw. Setter.

Auch vor dem Hinzufügen von Setzen und Gettern könnte es eine gute Idee sein, sich zu fragen, warum Sie die internen Daten des betreffenden Objekts freigeben.
Ich schlage vor, Sie lesen diesen Artikel -http://www.javarld.com/javarld/jw-09-2003/jw-0905-toolbox.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top