Specyfikacja języka Java nie wydaje się bronić pominięcia zmiennych, które odpowiadają zmiennym C static
.
Ukrywanie stanu w metodach klasowych ma kilka wad, gdy widzimy je z perspektywy Java. Ogólnie rzecz biorąc, istnienie zmiennej statycznej na poziomie funkcji nie jest rodzajem szczegółów implementacji, które chcesz ujawnić poza tą funkcją.
Ale stan metody jest w rzeczywistości częścią stanu klasy, a statyczne zmienne na poziomie metody musiałyby zostać przekształcone do postaci szeregowej/deserializowanej za każdym razem, gdy obiekt byłby utrwalony. To może nie brzmieć zwyczajnie, pochodząc z tła C., więc zanotuję kilka typowych przykładów.
- Klastry serwerów aplikacji mogą przekazywać obiekty sesji użytkownika między węzłami, aby zapewnić odporność na uszkodzenia.
- JAXB mogłyby zostać wykorzystane do Marshall obiektu do dokumentu XML
- JPA może być używany do utrwalania stanu obiektu do bazy
Jeśli wartość zmiennej jest warto zaoszczędzić, gdy obiekt jest utrwalane, istnieje duża szansa, że kod spoza tej klasy będzie musiał odwoływać się do tej wartości. I nagle oznacza to określenie poziomów dostępu - czy zmienna statyczna w metodzie publicznej jest automatycznie publiczna? Czy programista musiałby to zadeklarować?
Musimy również myśleć o rozszerzalności. Czy klasy pochodne byłyby wymagane do zaimplementowania tej samej zmiennej statycznej? A może byłoby odniesienie do zmiennej z funkcji w klasie bazowej?
Jest bardziej prawdopodobne, że metoda C, która użyłaby statycznej zmiennej lokalnej, byłaby dobrym kandydatem dla klasy w Javie. Ma stan i miejmy nadzieję, że istnieje w jednym celu.Występuje niewielka wada polegająca na enkapsulacji funkcjonalności do obiektu i zapewnia czystszą separację między wartościami przejściowymi (takimi jak zmienne lokalne) i bardziej długotrwałym stanem.
"Dziwne" jest bardzo subiektywne. – Richard
jaki jest twój przypadek użycia? Ogólnie rzecz biorąc, dane statyczne mają być częścią stanu obiektu. – TJD
@Richard - tak, to nie jest dziwne ... po prostu inne. –