【Java代码规范系列集合】泛型通配符使用

本文介绍了Java编程中的泛型通配符使用规范,包括<extendsT>和<superT>的用法,以及它们如何提高类型安全性和避免错误操作。遵循PECS原则,<extendsT>用于接收数据(读取),<superT>用于插入数据(添加)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java代码规范之泛型通配符使用

目录

该条规范是什么

该规范建议在Java编程中,使用泛型通配符来接收返回的数据时,可以使用<? extends T>来限制元素类型的上界,但此写法的泛型集合不能使用add方法。而对于<? super T>通配符,则不能使用get方法。这样做可以避免在使用泛型时出现错误。

为什么这么规定

以下是该规范的原因:

  1. 类型安全性:通过使用泛型通配符限制元素类型的上界或下界,可以增强代码的类型安全性,防止将不符合预期类型的元素添加到集合中。
  2. 避免错误操作:使用<? extends T>通配符表示只能读取元素,不能添加元素;使用<? super T>通配符表示只能添加元素,不能读取元素,可以避免在接口调用和赋值时出现错误操作。

多种主要用法及其代码示例

使用<? extends T>通配符来接收数据

import java.util.ArrayList;
import java.util.List;

public class GenericExample {
    public static void main(String[] args) {
        List<? extends Number> numbers = new ArrayList<>();
        
        // 不能添加元素,只能读取
        // numbers.add(10); // 编译错误
        
        // 可以读取元素
        Number number = numbers.get(0);
    }
}

使用<? super T>通配符来插入数据

import java.util.ArrayList;
import java.util.List;

public class GenericExample {
    public static void main(String[] args) {
        List<? super Integer> integers = new ArrayList<>();
        
        // 可以添加元素
        integers.add(10);
        
        // 不能读取元素
        // Integer value = integers.get(0); // 编译错误
    }
}

其他类似规范

  • 在使用泛型时,遵循PECS(Producer Extends Consumer Super)原则。即,如果方法参数需要生产者(返回值),则使用<? extends T>;如果方法参数需要消费者(写入值),则使用<? super T>

详细区别

使用<? extends T><? super T>的区别如下:

  1. <? extends T>:表示通配符上界,可以读取元素但无法添加元素。适合于需要频繁从集合中读取元素的情况。
  2. <? super T>:表示通配符下界,可以添加元素但无法读取元素。适合于需要频繁向集合中插入元素的情况。

官方链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值