Domanda

Sono nuovo in Java, ma ho una certa esperienza OOP con ActionScript 3, quindi sto cercando di eseguire la migrazione basandomi su cose che conosco.

In ActionScript 3 puoi creare getter e setter utilizzando le parole chiave get e set, ovvero crei un metodo nella classe e accedi ai dati tramite una proprietà di un'istanza di quella classe.Potrei sembrare complicato, ma non lo è.Ecco un esempio:

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

}

E accederei name in un oggetto come:

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

Come potrei farlo in Java?

Avere solo alcuni campi pubblici è fuori questione.Ho notato che esiste questa convenzione di utilizzare get e set davanti ai metodi, cosa con cui sono d'accordo.

Per esempio,

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

}

Esiste un equivalente di getter/setter di ActionScript 3 in Java, come in Accedere a un campo privato come campo da un'istanza della classe, ma disporre di un metodo per implementarlo internamente nella classe?

È stato utile?

Soluzione

No. getter e setter AS3 sono una cosa ECMAScript. In Java, sei bloccato con la GetVal () e SETVAL) Funzioni di stile (- non c'è alcun zucchero sintattico per rendere le cose facili per voi

.

Credo che Eclipse può aiutare auto-generazione di quei tipi di cose anche se ...

Altri suggerimenti

Il tuo codice Java va bene, tranne quello che vorresti creare _name privato.

Non ci sono Ottenere E impostato parole chiave in Java come nel tuo esempio AS3.Mi dispiace, non c'è niente di meglio di quello che stai già facendo.

Codice corretto:

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

Purtroppo, no, non v'è il supporto equivalente a livello di linguaggio Java.

Il ottenere * * e impostare modelli anche se sono così stabiliti nella cultura java che troverete un forte sostegno IDE per loro (per esempio, Eclipse li fare in modo automatico), e se si sta lavorando in qualcosa che utilizza il linguaggio delle espressioni prima fatta per JSP (EL), allora si sarà in grado di utilizzare la notazione proprietà per getter e setter di accesso.

Vorrei prendere in considerazione non avendo il getter o setter in quanto non fanno nulla nel tuo caso, tranne rendere il codice più complicato. Ecco un esempio, senza getter o 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 Non rendere le cose più complicate di quanto è necessario. E così spesso il caso che l'aggiunta di complessità soffrirà You-Aint-gonna-Need-It

Un modo IDE indipendente è quello di utilizzare Lombok , una libreria di annotazione-based che genera getter, setter, e anche equals() e hashcode(). Lo fa per il compilatore, ma non nel file di origine, in modo da non deve guardare a metodi, basta usarli.

In Java, l'unica opzione che avete senza esporre le parti interne del vostro oggetto è quello di rendere i propri getter e setter come si deve nel tuo esempio.

La convenzione è anteporre get o set davanti al campo che viene alterato. Così, come nel tuo esempio, il campo name avrebbe getName e setName metodi come il loro corrispondente getter e setter, rispettivamente.

Anche prima di aggiungere setter e getter, potrebbe essere una buona idea chiedere a te stesso perché stai esponendo i dati interni dell'oggetto in questione.
Mi suggerisce di leggere questo articolo - http://www.javaworld.com/javaworld/ JW-09-2003 / JW-0905-toolbox.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top