Java Generics - สัญลักษณ์แทนขอบเขตบน

เครื่องหมายคำถาม (?) หมายถึงสัญลักษณ์แทนหมายถึงชนิดที่ไม่รู้จักในชื่อสามัญ อาจมีบางครั้งที่คุณต้องการ จำกัด ประเภทของประเภทที่อนุญาตให้ส่งผ่านไปยังพารามิเตอร์ type ตัวอย่างเช่นวิธีการที่ดำเนินการกับตัวเลขอาจต้องการยอมรับเฉพาะอินสแตนซ์ของ Number หรือคลาสย่อยเท่านั้น

ในการประกาศพารามิเตอร์ Wildcard ขอบเขตด้านบนให้ระบุ? ตามด้วยคีย์เวิร์ดขยายตามด้วยขอบเขตบน

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงให้เห็นว่าการขยายถูกใช้เพื่อระบุสัญลักษณ์แทนขอบเขตบนอย่างไร

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));
   }
}

สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -

เอาต์พุต

sum = 6.0
sum = 7.0