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.