008泛型(Generic)

一.泛型(Generic)

目的

为解决元素存储的安全性问题,解决获取数据元素时,需要类型强转的问题。

 

使用

//Java 新特性
List<Integer> list = new ArrayList<>();
//在集合中使用
List<Integer> list = new ArrayList<Integer>();
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
    System.out.println(iterator.next());
}
Map<String, Integer> map = new HashMap<String, Integer>();
Set<Map.Entry<String,Integer>> set = map.entrySet();
for(Map.Entry<String,Integer> s : set){
    System.out.println(s.getKey() + s.getValue());
}
//自定义泛型类、泛型接口、泛型方法
//1.当实例化泛型类的对象,指明泛型的类型。指明以后,对应的类中所有使用泛型的位置,都变为实例化中指定的泛型的类型
//2.如果我们自定义了泛型类,但是在实例化时没有使用,那么就默认类型是Object类的
public class LiDong<T> {
    private T t;
    List<T> list = new ArrayList<>();
    public void add(){
        list.add(t);
    }
    public T getT(){
        return t;
    }
    public void setT(T t){
        this.t = t;
    }
    //3.声明泛型方法。当调用泛型方法时,指明泛型方法的类型。
    public <E> E getE(E e){
        return e;
    }
    public <E> List<E> fromArrayToList(E[] e,List<E> list){
        for(E e1 : e){
            list.add(e1);
        }
        return list;
    }
    @Override
    public String toString() {
        return "LiDong [t=" + t + "]";
    }
}
//4.继承泛型类或泛型接口时,可以指明泛型的类型
class SubLiDong extends LiDong<Integer> {}
//5.DAO:database access object 数据库访问对象
public class DAO<T> {
    public void add(T t){
    //...
    }
    public T get(int index){
    return null;
    }
    public List<T> getForList(int index){
        return null;
    }
    public void delete(int index){}
}
public class CustomerDAO extends DAO<Customer>{}
//泛型与继承的关系
若类A是类B的子类,那么List<A>就不是List<B>的子接口
//通配符 ?
List<A>、List<B>、。。。都是List<?>的子类
? extends A:可以存放A及其子类
? super A:可以存放A及其父类
发布了23 篇原创文章 · 获赞 7 · 访问量 1778

猜你喜欢

转载自blog.csdn.net/weixin_44145972/article/details/88926479