在 Java 中,泛型通配符(?)用于体现未知类型,通常用于增强泛型的灵活性。通配符可以与上下限联合利用,以限制泛型的范围。以下是通配符及上下限的利用示例:
1. 无界通配符 (?)
无界通配符体现可以接受恣意类型的泛型参数。
- public static void printList(List<?> list) {
- for (Object element : list) {
- System.out.println(element);
- }
- }
复制代码
- 示例调用:
- List<Integer> intList = Arrays.asList(1, 2, 3);
- List<String> 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<Integer> intList = Arrays.asList(1, 2, 3);
- List<Double> 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<Number> numberList = new ArrayList<>();
- addNumbers(numberList);
- System.out.println(numberList); // 输出: [1, 2, 3]
复制代码 4. 上下限通配符的综合利用
上下限通配符通常用于泛型类或方法中,以限制泛型类型的范围。
- public static <T> void copy(List<? extends T> src, List<? super T> dest) {
- for (T item : src) {
- dest.add(item);
- }
- }
复制代码
- 示例调用:
- List<Integer> srcList = Arrays.asList(1, 2, 3);
- List<Number> destList = new ArrayList<>();
- copy(srcList, destList);
- System.out.println(destList); // 输出: [1, 2, 3]
复制代码 总结:
- ?:无界通配符,接受恣意类型。
- <? extends T>:上界通配符,限制为 T 或其子类。
- <? super T>:下界通配符,限制为 T 或其父类。
通过公道利用通配符和上下限,可以增强泛型的灵活性,同时包管类型安全。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |