java中的泛型

主要优点和动机:在编译期间检测错误。

泛型类中的方法和泛型方法应该加以区别。泛型类和接口:public class Test<T> { }  public interface Test1<T> { }泛型类的构造方法不变,没有泛型符号。

 

泛型方法:public static <T> void test(E[] list) 为了定义一个泛型方法,泛型类型放在方法返回类型之前。

 

受限泛型 <E extends 类名/接口名> 泛型指定为另外一种类型的子类型。

自动装箱与拆箱:声明的类型为最终的类型。

 

通配符:?、?extends T、?super T。 用途:对一个泛型类型指定范围。

 

泛型的使用:泛型类的实例化,

泛型方法的调用,只要参数出现泛型不管是类的泛型还是参数为泛型都需要定义为泛型方法。

泛型对象的传递需要用到通配符:Test<String> test=new Test<>();

                                                      Test<?> test1=test;

为什么会有通配符?extends T、? super T。因为编译的时候它只能用一个具体的类型去替换泛型,所以两个类有继承关系时,需要用到这些通配符。当然完全可以用到通配符?进行取代,但是如果方法中涉及到两类的向下转型或者其他表示两者有明确的里氏替换关系的调用时,可能会发生编译错误。如下:

   v

泛型对象的传递需要用到通配符,但是通配符泛型对象加入值的时候需要注意。

Test<String> test = new Test<>();

 Test<?> test1 = test;

加入Test类中有一个add方法:public void add(E t);

test1调用add方法,无法加入任何值,因为这里?表示任何类,有点像这个案例

String s = new String("hello");

Object o = s;

String s1 = o 会报错。

但是如果Test <? super String> test2 = test; 

               test.add("hello"); 是不会报错,因为?super String表示任何Stirng的父类,java可以向下转型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值