Java Generics - Upper Bounded Wildcards

Znak zapytania (?) Reprezentuje symbol wieloznaczny, oznacza nieznany typ w rodzajach generycznych. Może się zdarzyć, że będziesz chciał ograniczyć rodzaje typów, które mogą być przekazywane do parametru typu. Na przykład metoda działająca na liczbach może akceptować tylko wystąpienia klasy Number lub jej podklasy.

Aby zadeklarować parametr wieloznaczny ograniczający górną granicę, należy podać znak?, Po którym następuje słowo kluczowe extends, po którym następuje górna granica.

Przykład

Poniższy przykład ilustruje, w jaki sposób extends jest używany do określenia górnej granicy symbolu wieloznacznego.

package com.tutorialspoint;

import java.util.Arrays;
import java.util.List;

public class GenericsTester {

   public static double sum(List<? extends Number> numberlist) {
      double sum = 0.0;
      for (Number n : numberlist) sum += n.doubleValue();
      return sum;
   }

   public static void main(String args[]) {
      List<Integer> integerList = Arrays.asList(1, 2, 3);
      System.out.println("sum = " + sum(integerList));

      List<Double> doubleList = Arrays.asList(1.2, 2.3, 3.5);
      System.out.println("sum = " + sum(doubleList));
   }
}

To da następujący wynik -

Wynik

sum = 6.0
sum = 7.0