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. –
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