Kategorie szkoleń | Egzaminy | Kontakt

Odpowiedź (1)

  • 0

Dzikie karty w typach generycznych mogą wystąpić w następujących kontekstach:

  • <?> - oznacza dowolny typ generyczny
  • <? extends T> - oznacza typ lub jego podtyp (typ potomny); typ T może także reprezentować typ interfejsu
    W tym przypadku T  stanowi tzw. górne ograniczenie dzikiej karty (upper bound of wildcard)
  • <? super T> - oznacza typ lub jego nadtyp (typ przodka)
    W tym przypadku T  stanowi tzw. dolne ograniczenie dzikiej karty (lower bound of wildcard)

 

Ostatnie dwie konstrukcje umożliwiają zdefiniowanie ograniczeń typów (boundaries) - ograniczeniem jest tu typ T.

Stanowią sposób na wprowadzenie polimorfizmu dla typów generycznych.

Przykłady:

List<?> I = new Vector<String>();
Set<? super Integer> s = new HashSet<Number>();
Map<? extends Number, ? extends Number> m = new HashMap<Integer, Float>();

Powyższe konstrukcje umożliwiają także określenie zależności pomiędzy dwoma typami generycznymi wybranej metody.

Przykładowo w klasie java.util.Collections metoda sort zdefiniowana jest następująco:

public static <T> void sort(List<T> list, Comparator<? super T> c)

 

  • Odpowiedział
  • @ | 29.11.2015
  • TRENER MODERATOR ALTKOM AKADEMII