泛型:
概念:不确定数据类型,减少重写的麻烦使程序更加通用(传入值和返回值都以Object类型为主)。
[类修饰词] class类名 <类型参数> [extends父类名] [implements接口名 ] { 类体}
①、 泛型+类:class qingke{ } // 表示类中可以有泛型,但必须是泛型T,Q。其他的都不行。
②、泛型+变量:private Q q ; // 表示 q的类型Q(不确定数据类型)
③、泛型+方法:public Q say ( Q say) { } publicT say(T t ) { // 在方法返回值或者在类名声明了<泛型>即可使用。
④、ArrayList list = new ArrayList();
list.add(15) ; list.add("sdf") ; list.add(0.2) ; list.add(new Date());
String sum = (String) list.get(1);
String sum = (String) list.get(3) ; 这样做虽然不报错,但是实际上是错误的。
因此引入泛型。
⑤、 GenericFoo( string ){ } //设置了类型的上限是Animals类型。
GenericFoo( string ){ } //设置了类型的下限是Animals类型(父类)。
GenericFoo //设置类型是泛型。
⑥、指定的数据类型。< String >
2 . 通配符:
<?>表示未指定的类型,java会自动将其当作最顶层的Object类,所以它和等效。
<? extends Student>表示泛型T指代Student类及继承它的子类、子类的子类......
<? super Studn>表示泛型T指代Student类及它的父类、父类的父类......