2012-07-16 13 views
8

Dlaczego poniższy fragment nie zostałby skompilowany?instanceof z kolekcją generyczną

if (mangoList instanceof List<Mango>) { System.out.println("true"); } 
  • Nie wiesz, że mangoList to rodzaj listy.
  • Słowo kluczowe instanceof działa tylko na typach pierwotnych.
  • Możesz sprawdzić typ kolekcji za pomocą odbicia.
  • Typy ogólne są usuwane przed uruchomieniem. (Ans)
  • Instrukcja może spowodować, że mangoList zostanie ustawione na wystąpienie listy.

Jak myślisz, która z nich jest poprawną odpowiedzią?

+0

Który z nich uważasz za prawidłową odpowiedź? Czemu? – Bernard

Odpowiedz

7

Poprawną odpowiedzią jest ta, którą oznaczono jako ans. Będziesz mógł powiedzieć, że mangoList jest List, ale nie będziesz w stanie uzyskać typ jego usuniętego argumentu. Remaning wyborów nie ma sensu.

+0

Świetnie, tak, tak się domyślałem ... dzięki za szybką odpowiedź –

0

Można jednak użyć listy instancji mangoList, aby sprawdzić, czy jest to lista z pewnym typem. Jest to przydatne, jeśli nie masz pewności, czy na przykład masz obiekt List lub Mango, ale nie rozróżniasz typów list. Aby to zrobić, radzę sprawdzić pierwszy element dla swojego typu.

3

1. "Typy ogólne są usuwane podczas pracy".

2. Nie można podać rodzaju listy.

Ale będziesz w stanie rozpoznać, że mangoList jest listą.

Powiązane problemy