Na przykład.
boolean isCurrent = false;
Jak nazwiesz jego getter i setter?
Na przykład.
boolean isCurrent = false;
Jak nazwiesz jego getter i setter?
Odpowiedzi:
Załóżmy, że tak
boolean active;
Metoda akcesorów byłaby
public boolean isActive(){return this.active;}
public void setActive(boolean active){this.active = active;}
Zobacz też
hasCustomName
, jak powinienem nazwać jego metody pobierające i ustawiające ? Czy setHasCustomName[setter]
i hasCustomName[getter]
dobrze?
public boolean isCustomerName(){return this.customerName;} public void setCustomerName(boolean customerName){this.customerName= customerName;}
http://geosoft.no/development/javastyle.html#Specific
is
przedrostek powinien być używany dla zmiennych i metod boolowskich.
isSet
,isVisible
,isFinished
,isFound
,isOpen
Jest to konwencja nazewnictwa metod logicznych i zmiennych używanych przez firmę Sun dla podstawowych pakietów Java. Użycie przedrostka is rozwiązuje częsty problem związany z wybieraniem złych nazw logicznych, takich jak status lub flaga. isStatus lub isFlag po prostu nie pasują, a programista jest zmuszony do wybrania bardziej znaczących nazw.
Metody ustawiające dla zmiennych boolowskich muszą mieć ustawiony przedrostek jak w:
void setFound(boolean isFound);
Istnieje kilka alternatyw dla przedrostka is, które lepiej pasują do niektórych sytuacji. Są to prefiksy, które mają, mogą i powinny:
boolean hasLicense(); boolean canEvaluate(); boolean shouldAbort = false;
hasData
, jak wyglądałby seter? Z całą pewnością setData(bool hasData)
wygląda to dla mnie strasznie źle ...
has
, can
, should
prefiksy nie są częścią specyfikacji. Zobacz specyfikację JavaBeans 1.01 sekcja 8.3.
boolean isIsCurrent(){...}
przeciwnym razie, narzekał framework używany do deserializacji obiektu getter not found for property isCurrent
.
Dla pola o nazwie isCurrent
prawidłowe nazewnictwo pobierające / ustawiające to setCurrent()
/ isCurrent()
(przynajmniej tak myśli Eclipse), co jest bardzo mylące i można je prześledzić wstecz do głównego problemu:
Twoje pole nie powinno być isCurrent
w pierwszej kolejności wywoływane . Jest to czasownik, a czasowniki są nieodpowiednie do reprezentowania stanu obiektu. Zamiast tego użyj przymiotnika, a nagle twoje nazwy pobierające / ustawiające będą miały więcej sensu:
private boolean current;
public boolean isCurrent(){
return current;
}
public void setCurrent(final boolean current){
this.current = current;
}
get
prefiksu podczas pobierania Boolean
vs is
dla aboolean
Myślę , że byłoby to:
void setCurrent(boolean current)
boolean isCurrent()
Może czas zacząć poprawiać tę odpowiedź? Osobiście chciałbym głosować na setActive()
i unsetActive()
(alternatywy może być setUnActive()
, notActive()
,disable()
, itd. W zależności od kontekstu), ponieważ „setActive” zakłada go aktywować w każdej chwili, co nie. Powiedzenie „setActive”, ale w rzeczywistości usunięcie stanu aktywnego jest trochę sprzeczne z intuicją.
Innym problemem jest to, że nie można nasłuchiwać konkretnego zdarzenia SetActive w sposób CQRS, trzeba by odsłuchać „setActiveEvent” i określić wewnątrz, czy słuchacz jest ustawiony jako aktywny, czy nie. Lub oczywiście określ, które zdarzenie wywołać podczas dzwonienia, setActive()
ale jest to sprzeczne z zasadą Separacji obaw.
Dobrą lekturą na ten temat jest artykuł na temat FlagArgument autorstwa Martina Fowlera: http://martinfowler.com/bliki/FlagArgument.html
Jednak wywodzę się z PHP i widzę, że ten trend jest coraz częściej przyjmowany. Nie jestem pewien, jak bardzo to żyje z rozwojem Java.
private boolean current;
public void setCurrent(boolean current){
this.current=current;
}
public boolean hasCurrent(){
return this.current;
}
has
używany do BO lub takiej usługi z pewnym przetwarzaniem, podczas gdy dla POJO jest is
. i dodaj opis swojej odpowiedzi.
Setter: public void setCurrent(boolean val)
Getter: public boolean getCurrent()
W przypadku wartości logicznych możesz również użyć
public boolean isCurrent()
Jako rozgrywający, co powiesz na:
// setter
public void beCurrent(boolean X) {
this.isCurrent = X;
}
lub
// setter
public void makeCurrent(boolean X) {
this.isCurrent = X;
}
Nie jestem pewien, czy te nazewnictwo ma sens dla rodzimych użytkowników języka angielskiego.