li泛型
就是把类型当作参数了,之前的函数中的参数类型是指定的值是不确定的,泛型就是把类型也给参数化了。
个人看法:这个泛型就是确保输入的类型都相同
所谓泛型,就是允许在定义类,接口时通过一个‘标识’表示类中某个‘属性的类型’或是某个方法的‘返回值或参数的类型’。这个类型参数将在使用时确定。
不用泛型
public void Test1(){
List list = new ArrayList();
list.add(3);
list.add(7);
list.add(9);
list.add(10);
list.add(30);
list.add(33);
//problem without generics
//1. type unsafe add() paramater is object means nican add
//any types into list like:
//list.add("hello"); it will casue error
Iterator it = list.iterator();
while(it.hasNext()){
//2.need cast , so it is tedious
Integer i = (Integer) it.next();
int score = i;
System.out.println(i);
}
用泛型
public void Test2(){
List<Integer> list = new ArrayList<Integer>();
list.add(88);
list.add(88);
list.add(00);
list.add(88);
list.add(76);
//list.add("aa"); 在编译阶段就会报错无法通过
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
Integer i = iterator.next(); //list里面都是integer所以不用强转 方便了
int score = i ;
System.out.println(i);
}
}
在集合框架在声明接口和实现类时,如果没有使用泛型,如果没有使用泛型,则认为操作的是Object类型的数据
自定义泛型类或接口
格式
//泛型类
class A<T>{
}
//泛型接口
interface B<T>{
}
例子:
public class Order<T> {
T t; //声明变量的类型为T
int orderId;
public Order() {
}
public Order(T t, int orderId) {
this.t = t;
this.orderId = orderId;
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
}
继承
//不是泛型类
public class subOrder1 extends Order{
}
//不是泛型类
public class subOrder2 extends Order<String>{
}
//这个是泛型类
public class subOrder3<T> extends Order<T> {
}
//简单点说有不确定类型的就是泛型类
使用说明:
1.在声明完自定义泛型类后,可以在类的内部使用类的泛型。
2.创建自定义泛型类的对象时,没有指明泛型参数类型,则泛型对应类型按照Object处理,但不等价于Object
3.泛型指定中只能用引用数据类型
说明:
多个泛型参数用,隔开<E1,E2,E3>
不可以在静态中使用类的泛型
泛型方法可以根据需要声明为static的