泛型在集合中的应用
泛型在集合经常能看到,有两个好处:1.把运行时出现 的问题提前至了编译时;2.避免了无谓的强制类型转换。
用法:两边泛型的类型必须相同,可允许一边不写,只是为了兼容性,并不推荐。
ArrayList<String> list = new ArrayList<String>();// true
//ArrayLsit<String> list = new ArrayList<Object>();//flase
//ArrayList<Object> list = new ArrayLsit<String>();//flase
ArrayList<String> list = new ArrayList<>();// true
ArrayList<> list = new ArrayList<String>();// true
泛型的分类
泛型可以分为泛型方法,泛型类和泛型接口,其中泛型类和泛型接口最常用。
泛型方法:在方法上的自定义泛型的具体数据类型是由调用该方法时传入的实参确定的。
public class Demo{
public static void main(String[] args) {
Integer i= print(123); // Integer
String str = print("abc");
} //<T> 把T字母声明为自定义的泛型、
public static <T> T print(T t){
return t;
}
}
泛型类:在类上自定义的泛型的具体数据类型是在创建对象的时候指定的,如果没有指定,默认Object。
class MyList<T>{ Object[] arr = new Object[10]; int index = 0; public MyList(){ } public void add(T o){
arr[index++] = o;
}
} public class Demo3 {
public static void main(String[] args) {
MyList<String> list= new MyList<String>();
list.add("123");
MyList list2 = new MyList();
new ArrayList<String>();
}
}
泛型接口:在接口上自定义泛型的具体数据类型是在实现该接口的时候指定的,也可以在创建接口实现类对象的时候再指定接口自定义泛型,如果没有指定,默认Object。
interface Dao<T>{ public void add(T t); public void remove(T t); } public class Demo4<T> implements Dao<T>{ public static void main(String[] args) {
new Demo4<String>();
} @Override
public void add(T t) {
// TODO Auto-generated method stub } @Override
public void remove(T t) {
// TODO Auto-generated method stub }
}