Dzisiaj rozmawiałem ze współpracownikiem na temat nazewnictwa final
pól w klasach Java.
W jego opionionach final
pola należy również traktować jako stałe, ponieważ ich wartości nie zmienią się po utworzeniu instancji.
Doprowadziłoby to do następującej konwencji nazewnictwa dla final
pól:
public class Foo {
private static final String BLA_BLA = "bla";
private final String BAR_BATZ;
...
}
Moim zdaniem tylko static final
pola powinny być uważane za stałe, podczas gdy pola, które są tylko, final
powinny być zgodne ze zwykłą konwencją nazewnictwa camelCase.
public class Foo {
private static final String BLA = "bla";
private final String barBatz;
...
}
Teraz jestem trochę niepewny, ponieważ jest on o wiele bardziej doświadczonym programistą niż ja i zwykle zgadzam się z jego opiniami i uważam go za bardzo dobrego programistę.
Wszelkie uwagi na ten temat?
...
Miało symbolizować ewentualne konstruktora, który wyznaczafinal
pole, ale nie jest to oczywiście możliwe dlastatic final
pola.static { }
blokami, które mogą być użyte do ustawienia pól statycznych w klasie, gdy klasa zostanie załadowana. Powiązane Praca z konstruktorem statycznym w Javie .Odpowiedzi:
Firma Sun (a teraz Oracle) utrzymała dokument zatytułowany Konwencje kodu dla języka programowania Java . Ostatnia aktualizacja tego była w roku 99, ale istota linii przewodnika po stylach trwa nadal.
Rozdział 9 obejmuje konwencje nazewnictwa.
W przypadku typu identyfikatora „stałych”:
Podane przykłady:
W nowszym dokumencie - wślizgnął się tam. Z zmiennych (samouczki Java> Nauka języka Java> Podstawy języka :
Wiele statycznych analizatorów Java próbuje to wymusić. Na przykład styl sprawdzania wymusza:
To naprawdę sprowadza się do konwencji społeczności piszących kod ... i idealnie zachowujących go bez zmian.
Powyższe przykłady podano jako
static final
te, które prawdopodobnie pochodzą z konwencji C dla#define
- które podobnie jak C, są zastępowane w kodzie podczas kompilacji, a nie w czasie wykonywania.Pytanie, które należy następnie zadać, brzmi: „Czy to zachowuje się jak stała? Czy zachowuje się jak pole jednokrotnego zapisu?” - a następnie zgodnie z konwencjami. Test lakmusowy na takie pytanie brzmiałby: „Gdyby szeregować obiekt, czy uwzględniałby ostatnie pole?” Jeśli odpowiedź jest taka, że jest stała, traktuj ją jako taką (i nie serializuj). Z drugiej strony, jeśli jest to część stanu obiektu, który wymagałby serializacji, to nie jest stała.
Niezależnie od przypadku ważne jest, aby zachować styl kodu, niezależnie od tego, czy jest on poprawny, czy zły. Gorsze problemy powstają w wyniku niespójnych konwencji w ramach projektu, a nie tylko czegoś, co obraża wzrok. Zastanów się nad uzyskaniem niektórych narzędzi do analizy statycznej i skonfiguruj je, aby zachować spójność.
źródło
MinWidth
ZamiastMIN_WIDTH
. Kolejne pytanie brzmi: co ze statycznymi rejestratorami końcowymi? Dzwonisz do nichLOG
/LOGGER
lublog
/logger
. Osobiścielog
wygląda lepiej zgodnie z kodem, ale kiedy niespójność jest akceptowalna, jeśli w ogóle?BAR_BATZ
nie jest stałą w tym przykładzie. KonstruktoryFoo
mogą ustawić różne wartości na poziomie obiektu. Na przykładźródło