Myślę, że z powodu type erasure używanie instanceof
i class literals
jest niedozwolone dla parameterized generic types
z wyjątkiem unbounded wild card types
. Dlaczego projektanci języka Java zezwalają na ten wyjątek? Nie ma żadnej roli usuwania typów dla nieograniczonych typów dzikich kart?Dlaczego operator instanceof jest dozwolony na nieograniczonym typie karty wieloznacznej, ale nie na innych parametrach sparametryzowanych w Javie?
5
A
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)
Powiązane problemy
- 1. vb.net - Dlaczego operator + = nie jest dozwolony dla ULong (UInt64)?
- 2. Podlewanie podklasy o parametrach sparametryzowanych dynamicznie
- 3. instanceof w Javie - dlaczego to się nie kompiluje?
- 4. Graphics.drawImage() w Javie jest bardzo powolny na niektórych komputerach, ale znacznie szybszy na innych
- 5. Dlaczego operator instanceof nie używa notacji typu camelcase?
- 6. Routing do działań o tych samych nazwach, ale innych parametrach
- 7. Dlaczego statyczny ddl nie jest dozwolony w PL/SQL?
- 8. Co to jest operator diamentów w Javie?
- 9. Co to jest operator & = w Javie
- 10. SFINAE działa w typie zwrotnym, ale nie jako parametr szablonu
- 11. Dlaczego ImageSource jest dozwolony jako zasób WPF?
- 12. Dlaczego to użycie operatora w końcowym typie powrotu jest kompilowane?
- 13. C# „jest” alternatywny operator w Javie
- 14. Dlaczego FileChannel w Javie nie jest blokowany?
- 15. Dlaczego "chroniony" modyfikator w Javie pozwala na dostęp do innych klas w tym samym pakiecie?
- 16. Właściwość "_body" nie istnieje na typie "Odpowiedź"
- 17. FBConnect: Dlaczego jest wyświetlany na niektórych stronach, a nie na innych?
- 18. + operator dla String w Javie
- 19. wartości aktualizowaniu mapy na podstawie innych mapie w Javie
- 20. dlaczego instanceof nie działa z Generic?
- 21. Dlaczego Java nie zezwala na przeciążenia na podstawie parametrów typu?
- 22. Błąd "Nie można załadować pliku lub zestawu". Działa na moim komputerze, ale nie na innych.
- 23. Dlaczego operator = działa na strukturach bez zdefiniowania?
- 24. jest sposób na wyłączenie "tab" na typie wejściowym = "tekst"?
- 25. Jak działa operator + w Javie?
- 26. indeks operator na wskaźniki
- 27. .htaccess: LogLevel nie jest tutaj dozwolony
- 28. Dlaczego moja aplikacja na iOS nie jest wyświetlana w oknie dialogowym innych aplikacji "Otwórz w"?
- 29. operator instanceof zwraca wartość false w przypadku zmiany łańcucha dziedziczenia
- 30. Dlaczego ten kod kompiluje się w Javie 1.6, ale nie w Javie 1.7?
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
@Geek: Tak, ale to dla * pola *, a nie * obiektu *. Są różne. –
Dlaczego sprawdza się przed 'ArrayList >' tak samo jak przy użyciu typu surowego 'ArrayList'? –