2013-02-19 6 views

Odpowiedz

7

Chodzi o to, że obiekt zna swoją konkretną klasę - ale nie ogólne argumenty tego typu. Jeśli więc skonstruujemy model ArrayList<Integer>, który w chwili wykonywania wie, że jest to typ ArrayList z rodzaju o pewnej liczbie - ale nie wie o części Integer.

W "ArrayList pewnego rodzaju" część jest właśnie ArrayList<?> środki, dlatego:

if (foo instanceof ArrayList<?>) 

jest prawidłowy. To jest po prostu równoważne użyciu typu surowego:

if (foo instanceof ArrayList) 
+0

ale nie ma meta danych dla kompilator powiedzieć, że 'foo' pole jest typu' 'ArrayList w czasie wykonywania? Mam na myśli tylko [twoją odpowiedź] (http://stackoverflow.com/a/339708/1527084) – Geek

+0

@Geek: Tak, ale to dla * pola *, a nie * obiektu *. Są różne. –

+0

Dlaczego sprawdza się przed 'ArrayList ' tak samo jak przy użyciu typu surowego 'ArrayList'? –

Powiązane problemy