Mam to w swoim kodzie
Thread.currentThread().sleep(x);
Eclipse mówi mi, żebym użył statycznej
Thread.sleep(x);
zamiast tego dlaczego? Jaka jest różnica, czy istnieje jakaś różnica w funkcjonalności między tymi 2 metodami?
Mam to w swoim kodzie
Thread.currentThread().sleep(x);
Eclipse mówi mi, żebym użył statycznej
Thread.sleep(x);
zamiast tego dlaczego? Jaka jest różnica, czy istnieje jakaś różnica w funkcjonalności między tymi 2 metodami?
Odpowiedzi:
Jest tylko jedna metoda, a nie dwie, i jest ona statyczna. Chociaż możesz wywołać metodę statyczną za pośrednictwem odwołania do instancji, nie jest to dobry styl. Wskazuje, że programista myśli, że wywołuje metodę instancji. Zdezorientowany programista może pomyśleć, że może spowodować, że inny wątek (nie bieżący) będzie spał w ten sposób, podczas gdy tak nie jest.
Obie linie kodu robią to samo, ale druga to lepszy styl.
W Javie sen jest metodą statyczną. Oba twoje przykłady robią dokładnie to samo, ale poprzednia wersja jest myląca, ponieważ wygląda na to, że wywołuje metodę na określonym obiekcie, ale w ogóle tego nie robi. W twoim przykładzie nie będzie to miało większego znaczenia, ale jest bardziej niebezpieczne, jeśli masz:
someOtherThread.sleep(x);
Tym razem wygląda na to, że każesz spać inny wątek, ale w rzeczywistości uśpisz bieżący wątek. Sposobem na uniknięcie popełnienia tego typu błędu jest zawsze wywoływanie metod statycznych przy użyciu klasy, a nie określonego obiektu.
Te dwa wywołania metod zachowują się identycznie, ponieważ wywołują tę samą metodę, ale użycie nazwy klasy ( w tym przypadku Thread ) zamiast wystąpienia w celu uzyskania dostępu do pól i metod statycznych sprawia, że ta statyczność jest jasna. Dlatego pojawia się to ostrzeżenie.
Biorąc jednak pod uwagę, że statyczne pola i metody są wyświetlane w określony sposób w większości IDE (na przykład kursywą w Eclipse i IntelliJ IDEA), czy to ostrzeżenie jest nadal konieczne? Może nie tak bardzo potrzebne, jak we wczesnych latach Java, kiedy używano prostych edytorów.
Thread.currentThread().sleep(x);
lub sposób, w jaki Eclipse mówi, że Thread.sleep(x);
kontekst statyczny jest wymagany, jeśli jest w potrzebie, więc wstrzymujemy się z niewielkim opóźnieniem w tym śnie.
Paradygmat statyczny ustawiony przez jeden obiekt, wpływa tylko na ten konkretny cykl życia sterty obiektu, ponownie biorąc pod uwagę, że ogólny statyczny cykl życia obiektu nie jest tak uciążliwy, w razie potrzeby można go użyć do ułatwienia kodowania, ale należy go wykonać ostrożnie jako statyczny stop- print jest określany przez Class
(na przykład: - Class.forName(pkg.className)
) jak z nazwy, a nie przez jakąkolwiek object
kopię klasy Class w HEAP
pamięci.
Ponownie użycie obiektu ma również wady i zalety w postaci słabych, fantomowych, mocnych odniesień ....,
Kod jest zagmatwany przez naturę. To po prostu sposób, w jaki robimy, aby działał i działał.