泛型的详解

泛型的使用

1.jdk 5.0新增的特性

2.在集合中使用泛型:
总结:
1.集合框架或集合类在jdk5.0时都修改为带泛型的结构。
2.在实例化集合类时,可以指明具体的泛型类型
3.指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法、结构、构造器、属性)使用到类的泛型的位置,都指定为实例化的泛型类型。
   比如:add(E  e)--->实例化以后:add(Integer  e)
4.注意点:泛型的类型必须是类,不能是基本数据类型。需要用基本数据类型的位置,拿包装类替换
5.如果实例化时,没有指明泛型的类型。默认类型为java.lang.Object类型

举例:
 @Test//已ArrayList为例
    public void test1(){
        ArrayList<Integer> list = new ArrayList<>();
        list.add(98);
        list.add(95);
        list.add(78);
        list.add(84);
        list.add(67);
        list.add(100);

        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            int integer = iterator.next();
            System.out.println(integer);
        }
    }
    @Test//已HashMap为例
    public void test2(){
        HashMap<String, Integer> map = new HashMap<>();
        map.put("Tom",12);
        map.put("Jerry",16);
        map.put("Mike",17);
        map.put("Wang",23);
        map.put("Ross",18);

        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
        while (iterator.hasNext()){
            Map.Entry<String, Integer> entry = iterator.next();
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println(key+"----->"+value);
        }
    }

3.泛型类
如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型
要求:如果大家定义了类是带泛型的,建议在实例化时要指明类的泛型
Order order = new Order();
        order.setOrderT("ABC");
        order.setOrderT(123);
建议:实例化时指明类的泛型
        Order<String> order1 = new Order<>();
        order1.setOrderT("Order:AA");
4.泛型方法
泛型方法:在方法中出现了泛型的结构,泛型参数与类的泛型参数没有任何关系。
换句话说,泛型方法所属的类是不是泛型类都没有关系。
泛型方法,可以声明为静态的。原因:泛型参数是在调用方法时确定的。并非在实例化类时确定

5.泛型在继承方面的体现
虽然类A是类B的父类,但是G<A>是G<B>二者不具备子父类关系,二者是并列关系
补充:类A是类B的父类,A<G>是B<G>的父类

6.通配符的使用
   通配符:?
   类A是类B的父类,G<A>和G<B>是没有关系的,二者共同的父类是:G<?>
   添加(写入):对于List<?>就不能向其内部添加数据(除null之外)
   获取(读取):允许读取数据
@Test
    public void Test1(){
        List<Object> list1 = null;
        List<String> list2 = null;

        List<?> list = null;
        list = list1;
        list = list2;

        print(list1);
        print(list2);

    }
    public void print(List<?> list){
        Iterator<?> iterator = list.iterator();
        while (iterator.hasNext()){
            Object next = iterator.next();
            System.out.println(next);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值