Java泛型的注意事项

本文详细介绍了Java泛型的使用,包括泛型接口和类的声明,以及泛型的注意事项。强调泛型只能用于引用类型,不能是基本类型,并且泛型可以接受指定类型的本类型或子类型。推荐使用类型推断简化代码,同时指出未指定泛型时默认为Object类型。在ArrayList等集合中,泛型用于确保添加和迭代时的数据类型安全,避免了强制类型转换的需要。
摘要由CSDN通过智能技术生成

语法:

interface 接口<T>{}

class 类<K,V>{};

其中,T,K,V不代值,而是表示类型。

任意字母都可以,常用T 表示Type;

注意事项:

泛型<E> 这个E表示泛型指定的数据类型:

1.必须是引用数据类型,不能是基本数据类型。

List<Integer> = new ArrayList<Integer>();//正确
List<int> = new ArrayList<int>();//错误

2.可以传入T指定类型的本类型/子类型,或者是可以满足自动类型转换的数据类型

既:不能传入超过E类型实现范围的类型。

3.实际开发中我们一般推荐简写

原因是编译器会进行类型推断。

但是注意如果前后都写,要注意前后一致。

List<Integer> list = new ArrayList<Integer>();//不被推荐
List<Integer> list = new ArrayList<>();//推荐
List<Object> list  = new ArrayList<Integer>();//错误

4.在不规定泛型得时候,默认是Object类型

List = new ArrayList();//推荐
以ArrayList为例,源码中说到:E是列表中元素的类型。
Type parameters:
<E> – the type of elements in this list
而这个E在源码中写到:
type parameter E extends Object
由上可知,当你不进行规定类型时,E的类型是Object。
但是注意 这个并不是代表ArrayList底层中维护的Object[]变成了你指定类型的数组,底层仍然维护的是一个Object[],只是里面存放的数据类型是你使用E指定的数据类型。
参考ArrayList的add()方法在添加数据时如果我们指定了数据类型,那么这个被添加的数据,因为泛型的存在,传入Object[]中类型就已经不再是Object类型。这也是为什么迭代时候不需要再进行向下转型的原因。因为在添加时,数据类型已经是我们使用泛型指定的类型了。反之,E默认为Object类型,迭代需要转型。
    private void add(E e, Object[] elementData, int s) {
        if (s == elementData.length)
            elementData = grow();
        elementData[s] = e;
        size = s + 1;
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值