泛型知识点总结

1.泛型只能接收包装类型

2.为什么会出现泛型?

1.集合随意存取的问题:未使用泛型

编译器检查:使用泛型

List<Integer> list=new ArrayList<>()
list.add("张三");
list.add(100);
list.add(true);
这样在不会发生编译错误,但是取数据时会造成类型转换异常(ClassCastException)

2.减少代码重复解耦,可以操作不同的数据类型。

3.当泛型在创建对象时没有指定类型时按照Object类型来操作

4.同一泛型类,根据不同数据类型创建的对象,本质上还是同一类型(泛型类类型)

5.泛型类的子类如果也是泛型类 则他俩的泛型类必须相同

class A<T> extends Demo<T>

为什么?答:因为在创建子类泛型类的时候需要先创建他的父类,如果子类和父类的泛型类不同,则父类不知道应该创建什么类型的数据就会报错。

6.非泛型类的子类需要明确父类的泛型是什么

class A extends Demo<String>

为什么?答:和上面是一样的,如果这个子类不是泛型类,那么创建的时候必须要明确父类的泛型类。

7.接口泛型如5、6一样

8.泛型类方法和泛型中的方法有什么区别

答:首先泛型中的方法使用到的T这种泛型在刚开始创建对象时就已经规定好了,而我们的泛型类方法则是可以传任意的参数,并可以返回当前这个参数的类型。

public <T> void printArray(T[] array) {
    for (T element : array) {
        System.out.println(element);
    }
} //泛型方法 返回值可以为空但是这个泛型方法必须显示的表名这个泛型的类型、必须和参数类型一致。

注意:这里需要在方法上专门<T>类型来标识,这样即使泛型类和泛型方法是一个T也会被区分出来。

9.只有泛型方法才支持使用static,如果想使用泛型,但不是泛型方法则无法使用static。

10.通配符:这个方法中 List《Number》这个参数是一个泛型类,不支持继承。使用重载方法也没用因为他们实质上是同一类型,根本没有重载,所以引出来了通配符的概念。所以可以所以传list《》里面的参数了。

11.上面的延申:

可以写成List《? extends Number》就可以接收子类的参数了。但是在这个方法里不可以进行添加操作,因为子类的类型很多,如果都可以添加进来就违背了泛型的原则。 在List实现类中实现了addAll的方法,这个方法的参数就是这种,可以在一个集合中接收子类集合。

12.用super代替extends则表示可以是当前类或者他的父类的数据类型。它可以支持添加当前类和父类的数据

13.这个泛型类T如果继承了某一种类型比如Number则在类型擦除时会变成Number而不是Object,在泛型方法中也是如此.桥接方法:正常对接口实现了这个方法,在类型擦除时,会将接口中的T变成Object这样实际上我们的方法就不对了,所以jvm帮我们重写了这个方法让接口和实现类对应上。

22.由于泛型的不可变性,将这个List《Number》list,即使你的这个Double继承了Number这个类也不能将这个Double传进去,需要将List《?extends Number》才可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值