Per un campo booleano, qual è la convenzione di denominazione per il suo getter / setter?


178

Per esempio.

boolean isCurrent = false;

Come si chiama getter e setter?


2
Suppongo che ti riferisci a JavaBeans, nel qual caso la risposta di @Jigar Joshi è corretta. Tuttavia, se stai chiedendo di getter / setter generici, l'unica convinzione è che i metodi contengono il nome del campo e il getter non accetta argomenti e restituisce un valore, il setter accetta un argomento e non restituisce alcun valore o restituisce l'oggetto stesso. vedi Buffer come esempio di un altro approccio a getter / setter.
Peter Lawrey,

Risposte:


255

Supponi di avere

boolean active;

Metodo di accesso sarebbe

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

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

Guarda anche


9
Potresti indicare la sezione delle convenzioni del codice di Sun in cui sono specificamente coperti i nomi getter booleani? Non ho potuto trovarlo.
Konstantin Pelepelin,

4
Ho un file booleano chiamato hasCustomName, Ora come dovrei chiamare i suoi metodi getter e setter ? E ' setHasCustomName[setter]e hasCustomName[getter]buona?
Hadi,

@Hadi basta dare un nome alla variabile "customerName" e generare getter n setter per questo. Getter e setter attesi sono public boolean isCustomerName(){return this.customerName;} public void setCustomerName(boolean customerName){this.customerName= customerName;}
Assegd,

1
come siamo passati dal nome personalizzato al nome del cliente? ;)
Kartik Chugh,

1
@Assegd La denominazione di "customerName" o "customName" è confusa e non indica che è booleana. Vedendo la variabile mi aspetto che contenga un nome. In questo caso, dovrebbe essere chiamato "hasCustomName" IMO.
Nathan,

83

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

  1. is il prefisso dovrebbe essere usato per variabili e metodi booleani.

    isSet, isVisible, isFinished, isFound,isOpen

Questa è la convenzione di denominazione per i metodi e le variabili booleani utilizzati da Sun per i pacchetti core Java. L'uso del prefisso is risolve un problema comune nella scelta di nomi booleani errati come status o flag. isStatus o isFlag semplicemente non si adattano e il programmatore è costretto a scegliere nomi più significativi.

I metodi setter per le variabili booleane devono aver impostato il prefisso come in:

void setFound(boolean isFound);

Esistono alcune alternative al prefisso is che si adatta meglio in alcune situazioni. Questi sono prefissi, possono e dovrebbero:

boolean hasLicense(); 
boolean canEvaluate(); 
boolean shouldAbort = false;

7
Quindi, se esiste la proprietà booleana hasData, come sarebbe il setter? Sicuramente, mi setData(bool hasData)sembra terribilmente sbagliato ...
Franz B.

7
@FranzB. Userei setHasData (...)
user362178

2
Per coloro che vogliono segue JavaBeans specifcation, sembra che has, can, shouldprefissi non sono parte delle specifiche. Riferimento Specifica JavaBeans 1.01 sezione 8.3.
VCD

@Andrew ciao. Quando sto usando il prefisso 'is' nella mia variabile e invio il valore di quella variabile dal mio file js nei dati, mi dà sempre il valore come falso. E se rimuovo il prefisso 'is' di quanto funzioni perfettamente. Quale può essere la ragione? Grazie in anticipo.
Me_developer

1
Il setter è semplice, perché il getter che dovevo usare boolean isIsCurrent(){...}altrimenti la struttura utilizzata per deserializzare l'oggetto, si lamentava getter not found for property isCurrent.
Maurizio Lo Bosco,

67

Per un campo denominato isCurrent, la corretta denominazione getter / setter è setCurrent()/ isCurrent()(almeno è quello che pensa Eclipse), che è molto confuso e può essere ricondotto al problema principale:

Il tuo campo non dovrebbe essere chiamato isCurrentin primo luogo. È un verbo e i verbi sono inappropriati per rappresentare lo stato di un oggetto. Usa invece un aggettivo e improvvisamente i nomi dei tuoi getter / setter avranno più senso:

private boolean current;

public boolean isCurrent(){
    return current;
}

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

4
E se il booleano non fosse un primitivo? Se è booleano dovrebbe essere un get o lo è?
Arun,

2
No, un tale metodo potrebbe restituire null, causando una NullPointerException. Ma proverei a evitare di tornare booleano in primo luogo
Sean Patrick Floyd il

3
@Arun Penso che dovrebbe essere impostato / get invece se set / è a causa di Boolean è un oggetto anziché primitivo, perché ha 3 statistiche, false, true o null.
Al-Mothafar,

1
IntelliJ utilizza per impostazione predefinita il getprefisso quando recupera un Booleanvs isper unboolean
jocull

1
@jocull e questo è il comportamento corretto, secondo la specifica JavaBeans
Sean Patrick Floyd,

6

Io credo che sarebbe stato:

void setCurrent(boolean current)
boolean isCurrent()

1
Mi piace quella convenzione, ma le convenzioni non contano davvero. Il più importante è attenersi a quello che hai scelto.
Clemente Herreman,

4
Convenzioni @Clement fanno importa quando si basano su strumenti che utilizzano queste convenzioni. JavaBeans è una convenzione con ampio supporto in numerose librerie (JSP / JSF / Spring / Groovy solo per citarne alcuni). Infrangere le convenzioni significa interrompere il modo in cui queste librerie funzionano.
Sean Patrick Floyd,

1
@Sean Right, ad eccezione del framework che si basa su convenzioni sulla configurazione. In questo caso le convenzioni sono imposte dal framework, quindi non si sceglie nulla. Buona osservazione.
Clemente Herreman,

5

Forse è tempo di iniziare a rivedere questa risposta? Personalmente vorrei votare per setActive()e unsetActive()(alternative possono essere setUnActive(), notActive(), disable(), ecc a seconda del contesto) dal momento che "setactive" implica che si attiva in ogni momento, che non si fanno. È abbastanza intuitivo dire "setActive" ma in realtà rimuovere lo stato attivo.

Un altro problema è che non è possibile ascoltare in modo specifico un evento SetActive in modo CQRS, è necessario ascoltare un 'setActiveEvent' e determinare all'interno di quel listener se è stato effettivamente impostato o meno. O, naturalmente, determinare quale evento chiamare quando si chiama, setActive()ma che poi va contro il principio di separazione delle preoccupazioni.

Una buona lettura su questo è l'articolo FlagArgument di Martin Fowler: http://martinfowler.com/bliki/FlagArgument.html

Tuttavia, vengo da un background PHP e vedo che questa tendenza viene adottata sempre di più. Non sono sicuro di quanto viva con lo sviluppo Java.


-1
private boolean current;

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

public boolean hasCurrent(){
    return this.current;
}

3
ha corrente cosa? Penso che hasusato per BO o un tale servizio con qualche elaborazione mentre per POJO lo è is. e aggiungi una descrizione della tua risposta.
Al-Mothafar,

-3
Setter: public void setCurrent(boolean val)
Getter: public boolean getCurrent()

Per i booleani puoi anche usare

public boolean isCurrent()

11
Perché l'OP pone una domanda sui valori booleani. Un getter con il prefisso 'get' non è (leggi: dovrebbe) mai usato per valori booleani.
Harold,

-4

Come setter, che ne dici di:

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

o

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

Non sono sicuro che questi nomi abbiano senso per i madrelingua inglesi.


1
Non hanno davvero senso
Yannjoel,

Ma sembra foneticamente forse promettente con alcuni attributi :)
seba.wagner,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.