Getters/setters em java
-
22-08-2019 - |
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?
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