Pergunta

Eu sou novo no Java, mas tenho alguma experiência de OOP com o ActionScript 3, então estou tentando migrar confiando em coisas que conheço.

No ActionScript 3, você pode criar getters e setters usando as palavras -chave GET e Set, o que significa que você cria um método na classe e acessa dados através de uma propriedade de uma instância dessa classe. Eu posso parecer complicado, mas não é. Aqui está um exemplo:

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 eu acessaria name em um objeto como:

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

Como eu faria isso em Java?

Apenas ter alguns campos públicos está fora de questão. Percebi que existe esta convenção de usar Get e Set na frente dos métodos, com os quais estou bem.

Por exemplo,

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

}

Existe um equivalente ao ActionScript 3 Getter/Setters em Java, como no acesso a um campo privado como um campo a partir de uma instância da classe, mas ter um método para implementá -lo internamente na classe?

Foi útil?

Solução

Não. AS3 Getters e Setters são uma coisa do Ecmascript. Em Java, você está preso às funções do estilo getVal () e SetVal ()-não há açúcar sintático para facilitar as coisas para você.

Eu acho que o Eclipse pode ajudar a gerar automaticamente esses tipos de coisas ...

Outras dicas

Seu código Java está bem, exceto que você gostaria de fazer _name privado.

Não há pegue e definir Palavras -chave em Java como no seu exemplo AS3. Desculpe, não fica melhor do que você já está fazendo.

Código corrigido:

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

Infelizmente, não, não há o apoio equivalente em nível de idioma em Java.

Os padrões Get* e Set*, porém, estão tão estabelecidos na cultura Java que você encontrará um forte suporte de IDE para eles (por exemplo, o Eclipse os fará automaticamente) e, se você estiver trabalhando em algo que usa a linguagem de expressão primeiro Feito para JSPs (EL), você poderá usar a notação de propriedade para acessar getters e setters.

Eu consideraria não ter o getter ou o setter, pois eles não fazem nada no seu caso, exceto tornar o código mais complicado. Aqui está um exemplo sem 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

O IMHO não torna as coisas mais complicadas do que você precisa. Com tanta frequência o caso que a adição de complexidade sofrerá de Você-Aint-Gonna-Need-It

Uma maneira independente de IDE é usar Lombok, uma biblioteca baseada em anotação que gera getters, setters e até mesmo equals() e hashcode(). Isso é feito pelo compilador, mas não no arquivo de origem, para que você não precise olhar para os métodos, basta usá -los.

Em Java, a única opção que você tem sem expor os internos do seu objeto é fazer seus próprios getters e setters, como você tem em seu exemplo.

A convenção é para prender get ou set em frente ao campo que está sendo alterado. Então, como no seu exemplo, o campo name teria getName e setName Métodos como seu getter e setter correspondentes, respectivamente.

Além disso, antes de adicionar setters e getters, pode ser uma boa ideia se perguntar por que você está expondo os dados internos do objeto em questão.
Eu sugiro que você leia este artigo -http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top