Rozumiem, że auto-boksowanie powinno być wykonywane ostrożnie, ponieważ odwołanie, które jest niesklasyfikowane, może mieć wartość zerową. Dlaczego auto-boksowanie jest również oznaczone jako ostrzeżenie? Czy są tu jakieś pułapki?Dlaczego auto-boks oznaczony jako ostrzeżenie?
Odpowiedz
Jeśli nie spodziewasz się problemów z wydajnością (pod względem mikrooptymalizacji), możesz bezpiecznie wyłączyć to ostrzeżenie. To tylko wskazówka na wypadek, gdybyś nie wiedział, że tu się dzieje auto-boks. W kodzie biznes logicznym, w którym masz obciążenie we/wy (z powodu transakcji DB lub dostępu do dysku), auto-boksowanie nigdy nie jest problemem.
W czasie zaćmień nie można zmienić tylko ostrzeżeń bokserskich bez wyłączania ostrzeżeń przed boksowaniem. Czy to jest coś, co sugerowałbyś wyłączenie (obaj z nich)? Wykonuję projekt uniwersytecki, a nauczyciel chce mieć zero ostrzeżeń na maksymalnym poziomie ostrzeżenia. (Selektywne ignorowanie ostrzeżeń jest dozwolone) – Artium
@Artium W twoim przypadku możesz użyć jawnych konwersji, aby operacja była widoczna z 'int i = Integer.intValue() 'i' Integer I = new Integer (i) '. Potem kompilator nie będzie narzekał. – stacker
Występuje błąd związany z oddzielaniem ostrzeżeń: https://bugs.eclipse.org/bugs/show_bug.cgi?id=163065 – Kyle
Chciałem wyłączyć to ostrzeżenie Eclipse, ale poniższy artykuł zmusił mnie do tego. Nadal nie jestem do końca pewny, ale wydaje mi się, że to może być dobry powód, by po prostu unikać autoboxingu.
https://effective-java.com/2010/05/the-advantages-and-traps-of-autoboxing/
autoboxing może przyczynić się do błędu związanego z „Usuń” metody zbiorów, choć prawdopodobnie jest to dość niejasne bug.
Napotkałem ten błąd, gdy użyłem generatora liczb losowych, aby wybrać indeks elementu do usunięcia z tablicy ArrayList. Generator zwrócił długi prymityw, który przypadkowo próbowałem użyć jako parametru dla List.remove (indeks int). Kompilator przekonwertował długi na długi i użył go w List.remove (Object o), co dało zupełnie inne zachowanie. Na szczęście instrukcja assert szybko zauważyła błąd.
Zgodnie z tą dyskusją dotyczącą tego problemu z "usunięciem", ktoś inny wpadł na podobny problem, gdy niespodziewanie zachowywał się jak liczba całkowita, choć nie rozumiem, jak to się stało. https://stackoverflow.com/questions/104799/why-arent-java-collections-remove-methods-generic (patrz komentarz ScArchera2)
To oczekiwane zachowanie dla przeciążonych funkcji, a nie błąd. –
- 1. Dlaczego agent budujący TeamCity jest oznaczony jako "Niezgodny"?
- 2. Xcode 4.2 xcdatamodel jest oznaczony jako kopiowane
- 3. svn diff: plik oznaczony jako typ binarny
- 4. Lingwistyczny tagger niepoprawnie oznaczony jako "OtherWord"
- 5. Zend Framework: Ten wiersz został oznaczony jako tylko do odczytu
- 6. Stan ModelState jest oznaczony jako niepoprawny dla pustego pola niepotrzebnego.
- 7. Nie oznaczony jako serializable błędu podczas szeregowania klasę
- 8. Błąd - nie jest oznaczony jako możliwy do serializacji
- 9. Zatrzymaj obiekt, który nie jest oznaczony jako możliwy do serializacji.
- 10. co to znaczy "zrozumieć" nagłówek mydła oznaczony jako "mustunderstand"
- 11. Jeśli metoda Protocol jest oznaczona jako @required, jeśli nie jest zaimplementowana, dlaczego kompilator wydaje ostrzeżenie, a nie błąd?
- 12. Ostrzeżenie jako błąd - Jak pozbyć się tych
- 13. Ostrzeżenie jako błąd, ale nie wszystkie
- 14. Dlaczego można ukryć to niezaznaczone ostrzeżenie?
- 15. CONTAINMENT jest oznaczony jako niepoprawna składnia w automatycznie generowanym skrypcie bazy danych.
- 16. ostrzeżenie
- 17. Dlaczego otrzymuję ostrzeżenie o konwersji danych?
- 18. Dlaczego otrzymuję ostrzeżenie o dostosowaniu UIBarButtonItem?
- 19. Dlaczego otrzymuję ostrzeżenie: "build.properties nie istnieje"
- 20. Dlaczego knitr wyświetla ostrzeżenie używając auto.arima?
- 21. Ostrzeżenie używana jako nazwa poprzedniego parametru, a nie jako część selektora
- 22. Kontekst `router` jest oznaczony jako wymagany w` Link`, ale jego wartość jest `niezdefiniowana`
- 23. Wizualizator debuggera i "Typ nie jest oznaczony jako możliwy do serializacji"
- 24. Tabela „./mysql/proc” jest oznaczony jako rozbił się i powinny być naprawione
- 25. Ukryj ostrzeżenie na poziomie rozwiązania. Traktuj ostrzeżenie jako błąd na poziomie rozwiązania
- 26. Cordova pokazuje ostrzeżenie jako "gwint OSTRZEŻENIE: [Twój funkcja] [N] wziął ms." W iOS
- 27. Dlaczego ten kod generuje ostrzeżenie o "potencjalnym wycieku zasobów"?
- 28. Ostrzeżenie dotyczące dwóch kontrolerów nawigacyjnych, które zostały przedstawione jako modalne.
- 29. Jak traktować ostrzeżenie MSB3245 (nie można rozwiązać odwołania) jako błąd?
- 30. error C2220: ostrzeżenie traktowane jako błąd - nie 'przedmiot' plik generowany
Moje ekologiczne poćmienie nie wyświetla ostrzeżeń o automatycznym boksowaniu i usunięciu boksu. Jakiego typu/wersji zaćmienia używasz? – LanguagesNamedAfterCofee
Można go włączyć (i inne różne ostrzeżenia) w oknie Właściwości projektu -> Kompilator Java -> Błędy/ostrzeżenia -> Problemy z programowaniem. – Artium
Zobacz: https://bugs.eclipse.org/bugs/show_bug.cgi?id=163065 Jest to żądanie funkcji do oddzielania boksów od rozpakowywania. – Kyle