JAVA_基础泛型

泛型

  1. 所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类 型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如, 继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实 际的类型参数,也称为类型实参)。

  2. 从JDK1.5以后,Java引入了“参数化类型(Parameterized type)”的概念, 允许我们在创建集合时再指定集合元素的类型,正如:List,这表明 该List只能保存字符串类型的对象。

JDK1.5改写了集合框架中的全部接口和类,为这些接口、类增加了泛型支持, 从而可以在声明集合变量、创建集合对象时传入类型实参。

在集合中使用泛型:

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

在集合中使用泛型之前的情况(以ArrayList为例)

public void test() {
        ArrayList list = new ArrayList();
        // 要求:存放数字
        list.add(123);
        list.add(456);
        list.add(848);
        list.add(-485);
        // 问题一:类型不安全
        list.add("Tom");
        for (Object score : list) {
            // 问题二:强转时,可能出现ClassCastException异常
            int stuScore = (Integer) score;
            System.out.println(stuScore);
        }
    }

在集合中使用泛型的情况(以ArrayList为例)

public void test2() {
        ArrayList<Integer> list = new ArrayList<Integer>();
    	// JDK 7新特性:类型推断
    	// ArrayList<Integer> list = new ArrayList<>();
        list.add(85);
        list.add(75);
        list.add(15);
        list.add(-87);
        // 编译时,就会进行检查,保证数据的安全
        //list.add("Tom");
        // 方式一
        for (Integer score : list) {
            // 避免了强转操作
            int stuScore = score;
            System.out.println(stuScore);
        }
        // 方式二
        Iterator<Integer> iterator = list.iterator();
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

在集合中使用泛型的情况(以HashMap为例)

public void test3() {
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    // JDK 7新特性:类型推断
    HashMap<String, Integer> map = new HashMap<>();
    map.put("Tom",87);
    map.put("Jerry",65);
    map.put("Mack",87);
    // map.put(125,"ABC");
    // 泛型的嵌套
    Set<Map.Entry<String,Integer>> entry = map.entrySet();
    Iterator<Map.Entry<String,Integer>> iterator = entry.iterator();
    while (iterator.hasNext()) {
        Map.Entry<String,Integer> e = iterator.next();
        String key = e.getKey();
        Integer value = e.getValue();
        System.out.println(key + "-----" + value);
    }
}
posted @ 2021-01-04 09:50  TuoYingtao  阅读(60)  评论(0编辑  收藏  举报