混进来了别的数据类型。转换类型 *** 作会出问题。需要在添加的时候对添加元素的类型做检查。
使用泛型的时候泛型是一个类型。不能是基本数据类型
试图加字符串的时候编译就过不去了。
定义一个结构的时候有了泛型。才能加泛型。
这个红线标的方法识别到是Integer的类型。然后Integer也能识别到。
泛型套娃。
Entry是Map的内部类。用点
2.将已有结构改成泛型类前
迭代器这里也改成泛型。
实现的Compareble类,要比较的泛型也修改。
定制排序里Comparator也要修改。
修改后里面有employ类型了,省的再强转判断。
按生日排序,就要比较MyDate。Comparable里面泛型用这个。
3.自定义泛型类可以定义get,set方法。
在另一个Test里测试。
set的时候出类型了。
泛型是创建对象的时候产生的,静态方法早于它创建。但泛型方法可以声明为静态的,然后里面再用泛型。
异常类里不用泛型
4.泛型方法
并不是方法里用了泛型就是泛型方法。
调用order里上图写的方法,
跟order是什么泛型没有一点关系,
调用这个方法后接受List
这俩并非继承,就是里面装的类型不一样。
5.通配符的使用不能向通配符的List里面加数据。但是可以加null,因为
get的时候里面的类型是?,所以自动生成的类型是object。
不能写但是能读。
5.1有限制的通配符的使用 5.1.1赋值的规则<?extends 类A> L1, 可以赋值给L1的是下面泛型里,小于等于。即Person的子或Person。
<?super 类A> L2,则是大于等于,即Person的父或者Person。
5.1.2读取的规则(看上界)【Person,+00】的时候,选个最大的放在左面读取。所以用object
【-00,Person】的时候,此时最大的是Person,选Person或者比Person大的都可以接受。(多态)。
List 1 的声明<=person。
List2的声明>=Person
5.1.3写入的规则(看下界),必须比界限小或者等于界限。可以用多态写进去。
【Person,+00】的时候,写入的类型小于等于Person即可。用多态解释。
【-00,Person】的时候,小的界限没法找出来,所以不能写。
List 1 的声明<=person
List2的声明>=Person
读取看上界,写入看下界。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)