2009-05-16 8 views

Odpowiedz

12

Niezupełnie w zwykłym programowaniu java.

Ale jeśli pracujesz intensywnie nad zastrzykiem zależności, prawdopodobnie masz niewiele lub wcale nie masz statycznych metod. W takim kontekście dość powszechne jest posiadanie tylko kilku klas narzędziowych za pomocą metod statycznych i innych metod statycznych.

-1

Nie sądzę, że szczególnie w przypadku singletonów.

8

Nie, nie jest źle. Na przykład powszechnym zastosowaniem jest posiadanie statycznych metod fabrycznych w definicji klasy.

4

Wydaje mi się, że można tworzyć statyczne klasy utils, szczególnie gdy nie masz pewności (jeszcze) jaki powinien być projekt, ponieważ wciąż uczysz się o domenie problemu.

Statyczność jest markerem "jeszcze zaprojektowanym prawidłowo". Często statyczne rozwiązanie jest całkowicie wystarczające; ale czasami, w miarę postępów projektu, musisz napisać "całą partię", ale masz (na późniejszym etapie) o wiele pełniejsze zrozumienie dziedziny problemowej, a zatem jesteś w stanie właściwie zaprojektować "właściwe rozwiązanie" tych problemów.

Myślę, że nas programistów młotkuje się niesprawiedliwie o "przeróbki". Musisz wykonać pracę, aby zrozumieć pracę wystarczająco dobrze, aby wykonać pracę poprawnie. Nie widzę żadnego wyjścia poza ten haczyk 22;

Mogę przytoczyć wiele przykładów statycznych z podstawowego API. java.lang.Math, java.util.Arrays, java.util.Collections. ALE zwróćcie uwagę, że te klasy są "klasami utils", które istnieją tylko po to, aby zapewnić mnóstwo statycznych metod. IMHO, Obecność metod statycznych w "obiekcie stanowym" to po prostu błaganie o refaktoryzację.

Założę się, że dzisiejsi projektanci interfejsów API chcieliby móc dzielić Integer (i inne klasy wrapperów) ... ALE są dobrze i prawdziwie zatrzymani z tym, co mają. Co jest samo w sobie ostrzeżeniem ... to statyczne implikuje ostateczne i istnieje cholernie dobry powód, dla którego (w przeciwieństwie do C++) metody java mogą być nadpisywane domyślnie . Statyczny jest z natury bardziej "wiążący" niż nie-statyczny ... do tego stopnia, że ​​NIE MOŻESZ dostosować implementacji do różnych sytuacji, kontekstów itp. Itp.

Pozdrawiam. Keith.

+0

W "obiektach stanowych", jak masz tendencję do refaktoryzacji metod statycznych - przenieś je do klas pomocniczych/utylitarnych lub po prostu uczyń je niestatycznymi? (A co z prywatnymi metodami pomocniczymi - czy uczyniłbyś je niestatycznymi bez względu na to, czy używają pól instancji?) – Jonik

+0

Jeśli metoda nie wymaga podania ostatniej rzeczy, to bycie samozwańczonym manekinem daje jej dostęp do stwierdzenia, ponieważ wtedy musiałbym się martwić stanem klasy, która czyta/pisze/edytuje tę metodę (która może być całkiem sporym kawałkiem). Wolę podzielić klasy na "stateful" i Helper. Śledź mój obecny projekt C#. GmlReader (google GML) jest statyczną klasą utils z jedną publiczną metodą: public static IGeometry ReadGeometry (czytnik XmlReader) ...wielu ludzi miesza serializację i deserializację w DTO, który nie skaluje się dobrze do wielu formatów. Jak ja to robię. YMMV. – corlettk

0

Uważam, że nie jest dobrym pomysłem posiadanie metod statycznych i niestatycznych w tej samej klasie o tej samej nazwie. To może być bardzo mylące. Proponuję, aby w tym przypadku nazwy były inne.

Podobnie, nie należy tworzyć metod o tej samej nazwie, ale o różnej wielkości liter lub metod o tej samej nazwie, co klasa w tej samej klasie. Oba są legalne, a nawet występują w JDK, ale mylą IHMO.

Powiązane problemy