目录

java泛型通配符及上下界extends,super保证安全性灵活性可读性

java泛型通配符?及上下界(extends,super)保证安全性、灵活性、可读性

在 Java 中,泛型通配符(?)用于表示未知类型,通常用于增强泛型的灵活性。通配符可以与上下限结合使用,以限制泛型的范围。以下是通配符及上下限的使用示例:


1 无界通配符 (?)

无界通配符表示可以接受任意类型的泛型参数。 public static void printList(List list) { for (Object element : list) { System.out.println(element); } }

  • 示例调用: List intList = Arrays.asList(1, 2, 3); List stringList = Arrays.asList(“Hello”, “World”); printList(intList); // 输出: 1 2 3 printList(stringList); // 输出: Hello World

2 上界通配符 ( extends T)

上界通配符表示泛型类型必须是 T 或其子类。 public static double sumOfList(List extends Number list) { double sum = 0.0; for (Number number : list) { sum += number.doubleValue(); } return sum; }

  • 示例调用: List intList = Arrays.asList(1, 2, 3); List doubleList = Arrays.asList(1.1, 2.2, 3.3); System.out.println(sumOfList(intList)); // 输出: 6.0 System.out.println(sumOfList(doubleList)); // 输出: 6.6

3 下界通配符 ( super T)

下界通配符表示泛型类型必须是 T 或其父类。 public static void addNumbers(List super Integer list) { list.add(1); list.add(2); list.add(3); }

  • 示例调用: List numberList = new ArrayList<>(); addNumbers(numberList); System.out.println(numberList); // 输出: [1, 2, 3]

4 上下限通配符的综合使用

上下限通配符通常用于泛型类或方法中,以限制泛型类型的范围。 public static void copy(List extends T src, List super T dest) { for (T item : src) { dest.add(item); } }

  • 示例调用: List srcList = Arrays.asList(1, 2, 3); List destList = new ArrayList<>(); copy(srcList, destList); System.out.println(destList); // 输出: [1, 2, 3]

总结:

  1. ? :无界通配符,接受任意类型。
  2. extends T:上界通配符,限制为 T 或其子类。
  3. super T:下界通配符,限制为 T 或其父类。 通过合理使用通配符和上下限,可以增强泛型的灵活性,同时保证类型安全。