Jakie jest znaczenie tego typu ostrzeżenia bezpieczeństwa w niektórych rodzajowych Java rzuca?

głosy
61

Jaki jest sens ostrzeżenia Java ?

Bezpieczeństwo typu: Obsada od obiektu do listy jest rzeczywiście sprawdzanie przeciwko skasowane listy typów

Mam to ostrzeżenie, gdy próbuję oddać obiekt do typu z informacji ogólnych, takich jak w poniższym kodzie:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Utwórz 02/08/2008 o 09:58
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
50

To ostrzeżenie jest tam, ponieważ Java nie jest faktycznie przechowywania informacji typu w czasie wykonywania w obiekcie, który używa rodzajowych. Tak więc, jeśli objectjest rzeczywiście List<String>, nie będzie ClassCastExceptionw czasie wykonywania wyjątkiem aż element jest dostępny z listy, która nie pasuje do typu rodzajowego zdefiniowanego w zmiennej.

Może to spowodować dalsze komplikacje, jeśli elementy są dodawane do listy, z tej błędnej informacji ogólnych typu. Każdy kod nadal trzyma odniesienie do wykazu, ale z prawidłowym informacji ogólnych typu będą miały teraz listę niespójne.

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

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

Należy jednak pamiętać, że nie będą mogli korzystać z pewnych metod, takich jak dodawanie, ponieważ kompilator nie wie, czy próbujesz dodać obiekt nieprawidłowego typu. Powyższe będzie działać w wielu sytuacjach, ale jeśli trzeba użyć dodać, lub jakiś podobny sposób ograniczony sposób, po prostu trzeba cierpieć żółty podkreślenia w Eclipse (lub SuppressWarningadnotację).

Odpowiedział 02/08/2008 o 09:58
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more