Para um campo booleano, qual é a convenção de nomenclatura para seu getter / setter?

178

Por exemplo.

boolean isCurrent = false;

O que você chama de getter e setter?

user496949
fonte
2
Suponho que você esteja se referindo ao JavaBeans. Nesse caso, a resposta de @Jigar Joshi está correta. No entanto, se você estiver perguntando sobre getter / setters genéricos, a única convenção é que os métodos contêm o nome do campo e o getter não aceita argumentos e retorna um valor, o setter usa um argumento e não retorna nenhum valor ou retorna o próprio objeto. veja Buffer como um exemplo de outra abordagem para getter / setters.
Peter Lawrey

Respostas:

254

Suponha que você tenha

boolean active;

O método de acessadores seria

public boolean isActive(){return this.active;}

public void setActive(boolean active){this.active = active;}

Veja também

Jigar Joshi
fonte
9
Você poderia apontar a seção das convenções de código da Sun onde os nomes dos geters booleanos são cobertos especificamente? Não consegui encontrar.
Konstantin Pelepelin /
4
Eu tenho um arquivo booleano chamado hasCustomName: Agora, o que devo nomear para seus métodos getter e setter ? É setHasCustomName[setter]e hasCustomName[getter]bom?
Hadi
@Hadi apenas nomeie sua variável "customerName" e gere getter n setter para ela. O getter e os setters esperados são public boolean isCustomerName(){return this.customerName;} public void setCustomerName(boolean customerName){this.customerName= customerName;}
Assegd 10/10
1
como passamos do nome personalizado para o nome do cliente? ;)
Kartik Chugh
1
@Assegd Nomear "customerName" ou "customName" é confuso e não indica que é booleano. Vendo a variável que eu esperaria que contenha um nome. Nesse caso, ele deve ser chamado IMO "hasCustomName".
Nathan
83

http://geosoft.no/development/javastyle.html#Specific

  1. is O prefixo deve ser usado para variáveis ​​e métodos booleanos.

    isSet, isVisible, isFinished, isFound,isOpen

Esta é a convenção de nomenclatura para métodos e variáveis ​​booleanos usados ​​pela Sun para os pacotes principais do Java. O uso do prefixo is resolve um problema comum de escolha de nomes booleanos inválidos, como status ou sinalizador. isStatus ou isFlag simplesmente não se encaixa, e o programador é forçado a escolher nomes mais significativos.

Os métodos setter para variáveis ​​booleanas devem ter o prefixo definido como em:

void setFound(boolean isFound);

Existem algumas alternativas ao prefixo is que se encaixam melhor em algumas situações. Estes são prefixos has, can e should:

boolean hasLicense(); 
boolean canEvaluate(); 
boolean shouldAbort = false;
Narayan
fonte
7
Portanto, se houver a propriedade booleana hasData, como seria o setter? Certamente, setData(bool hasData)parece-me terrivelmente errado ...
Franz B.
7
@FranzB. Eu uso setHasData (...)
user362178
2
Para aqueles que querem seguir JavaBeans specifcation, parece que has, can, shouldprefixos não são parte da especificação. Referência JavaBeans Especificação 1,01 secção 8.3.
VCD
@Andrew hi. Quando estou usando o prefixo 'is' na minha variável e enviando o valor dessa variável do meu arquivo js nos dados, ele sempre está me dando o valor como false. E se eu remover o prefixo 'is', ele estará funcionando perfeitamente. Qual pode ser a razão disso? Desde já, obrigado.
Me_developer 24/04/19
1
O setter é direto, pois o getter que eu tinha que usar, boolean isIsCurrent(){...}caso contrário a estrutura usada para desserializar o objeto, estava reclamando getter not found for property isCurrent.
Maurizio Lo Bosco
67

Para um campo chamado isCurrent, a nomeação correta de getter / setter é setCurrent()/ isCurrent()(pelo menos é o que o Eclipse pensa), que é altamente confuso e pode ser rastreado até o problema principal:

Seu campo não deve ser chamado isCurrentem primeiro lugar. Is é um verbo e os verbos são inapropriados para representar o estado de um objeto. Em vez disso, use um adjetivo e, de repente, seus nomes de getter / setter farão mais sentido:

private boolean current;

public boolean isCurrent(){
    return current;
}

public void setCurrent(final boolean current){
    this.current = current;
}
Sean Patrick Floyd
fonte
4
E se o booleano não for um primitivo? Se for booleano, deve ser um get ou é?
Arun
2
Não, esse método poderia retornar nulo, o que causaria uma NullPointerException. Mas eu tentaria evitar o retorno de booleano em primeiro lugar
Sean Patrick Floyd
3
@ Arun Eu acho que deve ser definido / obter em vez disso, se definido / é por causa de Boolean é um objeto em vez de primitivo, porque tem 3 estatísticas, falso, verdadeiro ou nulo.
Al-Mothafar
1
O IntelliJ usa como padrão o getprefixo ao recuperar um Booleanvs ispara umboolean
jocull 14/02/19
1
@jocull e que é o comportamento correcto, de acordo com a especificação JavaBeans
Sean Patrick Floyd
6

Eu acredito que seria:

void setCurrent(boolean current)
boolean isCurrent()
miku
fonte
1
Eu gosto dessa convenção, mas as convenções realmente não importam. O mais importante é ficar com o que você escolheu.
Clement Herreman
4
As convenções do @Clement são importantes quando você conta com ferramentas que usam essas convenções. O JavaBeans é uma convenção com amplo suporte em várias bibliotecas (JSP / JSF / Spring / Groovy apenas para citar algumas). Quebrar as convenções significa quebrar a maneira como essas bibliotecas funcionam.
Sean Patrick Floyd
1
@Sean Right, exceto pela estrutura que se baseia em convenções sobre a configuração. Nesse caso, as convenções são impostas pela estrutura, para que você não escolha nada. Boa observação.
Clement Herreman
5

Talvez seja a hora de começar a revisar esta resposta? Pessoalmente, eu votaria para setActive()e unsetActive()(alternativas podem ser setUnActive(), notActive(), disable(), etc. dependendo do contexto) uma vez que "setActive" implica que você ativá-lo em todos os momentos, o que você não faz. É meio contra-intuitivo dizer "setActive", mas remover o estado ativo.

Outro problema é que você não pode ouvir especificamente um evento SetActive de uma maneira CQRS, seria necessário ouvir um 'setActiveEvent' e determinar dentro do ouvinte se o ouvinte está realmente ativo ou não. Ou, é claro, determine qual evento chamar ao chamar, setActive()mas isso vai contra o princípio da separação de preocupações.

Uma boa leitura sobre isso é o artigo do FlagArgument de Martin Fowler: http://martinfowler.com/bliki/FlagArgument.html

No entanto, venho de um histórico em PHP e vejo essa tendência sendo cada vez mais adotada. Não tenho certeza do quanto isso vive com o desenvolvimento Java.

Christian Vermeulen
fonte
-1
private boolean current;

public void setCurrent(boolean current){
    this.current=current;
}

public boolean hasCurrent(){
    return this.current;
}
Mkne
fonte
3
tem atual o que? Eu acho que hasusado para BO ou um serviço desse tipo com algum processamento, enquanto para POJO é is. e adicione alguma descrição sobre sua resposta.
Al-Mothafar #
-3
Setter: public void setCurrent(boolean val)
Getter: public boolean getCurrent()

Para booleanos, você também pode usar

public boolean isCurrent()
Suraj Chandran
fonte
11
Porque o OP afirma uma pergunta sobre valores booleanos. Um getter prefixado com 'get' é (leia-se: deve) nunca ser usado para valores booleanos.
Harold
-4

Como levantador, que tal:

// setter
public void beCurrent(boolean X) {
    this.isCurrent = X;
}

ou

// setter
public void makeCurrent(boolean X) {
    this.isCurrent = X;
}

Não sei se esses nomes fazem sentido para os falantes nativos de inglês.

amekusa
fonte
1
Eles realmente não fazer sence
Yannjoel
Mas sons foneticamente talvez prometendo com alguns atributos :)
seba.wagner