Jakie jest znaczenie Ostrzeżenia typu w niektórych odmianach Java generics?

Jakie jest znaczenie Java warning ?

Bezpieczeństwo typu: rzut z obiektu do listy faktycznie sprawdza się w porównaniu z usuniętą listą typu

Dostaję to Ostrzeżenie, gdy próbuję rzucić obiekt do typu z ogólnymi informacjami, takimi jak w następującym kodzie:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Author: Insane Skull, 2008-08-02

1 answers

To Ostrzeżenie istnieje, ponieważ Java w rzeczywistości nie przechowuje informacji o typie w czasie wykonywania w obiekcie, który używa generycznych. Tak więc, jeśli object jest w rzeczywistości List<String>, nie będzie ClassCastException w czasie wykonywania, z wyjątkiem pozycji, która nie jest dostępna z listy, która nie pasuje do typu ogólnego zdefiniowanego w zmiennej.

Może to spowodować dalsze komplikacje, jeśli pozycje zostaną dodane do listy, z tą nieprawidłową informacją o typie ogólnym. Każdy kod nadal zawierający odniesienie do listy, ale z poprawne informacje o typie ogólnym będą teraz miały niespójną listę.

Aby usunąć ostrzeżenie, spróbuj:

List<?> list = (List<?>) object;

Należy jednak pamiętać, że nie będzie można używać pewnych metod, takich jak add, ponieważ kompilator nie wie, czy próbujesz dodać obiekt nieprawidłowego typu. Powyższe będzie działać w wielu sytuacjach, ale jeśli musisz użyć metody add, lub innej podobnie ograniczonej metody, będziesz musiał po prostu cierpieć na żółte podkreślenie w Eclipse (lub SuppressWarning adnotacja).

 51
Author: Mike Stone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-29 06:32:32