为什么使用泛型
变量声明的类型必须匹配传递给实际对象的类型
Integer是Number的子类,初学者一看好像没什么问题,但是实际上是错的,变量声明的类型必须匹配传递给实际对象的类型,也就是,你前面声明了List 集合中接收Number的类型,后面实例化集合也必须是Number类型
List <Number> numbers = new ArrayList<Number>;
后面实例化类型的Number也可省略,也就是
List <Number> numbers = new ArrayList<>;
泛型作为方法参数
定义一个抽象类Goods
定义一个Books类继承Goods类
定义一个Clothes类继承Goods类
定义一个Shoes类继承Goods类
最后定义一个GoodsSeller实现一个sellGoods方法,里面传入的是商品的集合。遍历集合中的每个对象,调用sell方法。
List<? extends Goods>
这种就是Goods以及Goods的子类可作为泛型的参数类型
测试类
重点看最后一句
GoodsSeller goodsSeller =new GoodsSeller();
goodsSeller.sellGoods(booksList);
我传入的是booksList这个集合,泛型是Books是Goods的子类。
最后还有一点
List<? super Goods>
这种就是Goods以及Goods的超类可作为泛型的参数类型
自定义简单泛型类
只传入一个泛型
实例化intNum这个对象的时候,泛型类为Interger所以通过intNum这个对象调用setNum方法只能传入Interger类型的数据。
传入两个泛型
自定义简单泛型方法
注意。这里《T》一定要写在,访问修饰符publice和返回类型void中间
这里后面加上了extends Number。传入的hello就报错了。因为只能传入Number的子类,而hello是String类型。并不是Nmuber的子类。