认识泛型
定义类,接口,方法时,同时声明了一个或多个类型变量,如
泛型类,泛型接口,泛型方法
泛型可以约束在编译阶段能操作的数据类型,并自动检查。
本质原因:把具体的数据类型作为参数传给类型变量
如ArrayList List =new ArrayList();
E代表element,元素类型,T代表返回值类型,K键类型,V值类型。
一般用E就可以
泛型类
泛型接口
泛型方法
右边不是泛型方法的原因是E是由它所在的泛型类定义的。
正确的是左边是自己定义的泛型方法。
下面两个方法中的T可以接收Student【】类,也可以String类。
在最下面的方法中,返回值也可以设置为T,进来什么返回什么。
通配符和上下限
在使用泛型时用,泛型类,泛型接口,泛型方法这三种都是定义泛型
遇到的问题:(黑色那行)
解决:下图:用通配符。但是又遇到了新问题。我的本意是让车比赛,有人悄悄把狗放进了(dog不是car的子类)
解决:泛型上下限
泛型支持的类型:引用数据类型
不支持基本类型,只能支持对象类型(引用数据类型)
why?思考原因
如果这样的话,最后12就交给了object的变量,但是12不是对象。
解决:
我们把基本数据类型也包装成对象类型,出现了包装类
包装类
记忆:int是Integer,char是Character,其余的是首字母大写
例题
结果为true,原因是推荐的第二种方法实际上返回值是我们已经预先默认创建好的-128到127的对象。所以是一样的地址。
结果为false。原因是超过127,所以真的new
自动装箱与拆箱
所以实际上我们从前写的,如下图蕴含了装箱与拆箱。130此时其实已经装箱为了对象
包装类新增的功能
基本类型转字符串
我们事实上采用第三种方案,任意内容加字符串双引号得到字符串。