java泛型类

一、泛型概念简述
泛型吗,就是泛泛的类型,指代某一种类型的符号。
这样有啥好处呢?1.消除强制类型转换;2.附加类型检查,避免错误类型;3.确保Java类型安全(这才是主要目的)等。相信用过集合框架的都有类似体会。

二、泛型基础特征
1)在定义泛型类或声明泛型类的变量时,使用尖括号来指定形式类型参数。例如java.util.Map接口的定义:
public interface Map<K, V> {

               public void put(K key, V value);

               public V get(K key);

     }

命名方式约定以大写的单个字母名称作为类型参数。
2)泛型不是协变的,即无法向上转型。不同于Object obj = new String(“str”),以下方式是错误的:

          错误代码   即无法向上转型
          List<int> intsList = new ArrayList<int>();
          List<Object> objList = intsList; 

如果第二行写成List objList = strList,可以通过编译但会出现警告(类型不安全)。那如何表示泛型为一个通用泛型,就是定义个尖括号内可以放任意类型的泛型呢?这是就要使用类型通配符了。
3)类型通配符,’?’表示。可以声明一个List<?>,作为任何泛型List的父类型。即List<?> objList = strList,这样就没啥问题了。
4)受限泛型,即给泛型定义上下限。简单说,就是类型参数必须是某类及其子类(上限),或者是某类及其父类(下限)。
怎么弄捏,例如List为传入参数,限定类型参数必须为Number,如下:

 public void fun(List<? extends Number> list) {…}

上述List只接收Number及Number的子类。另一种方式,只接收Integer及其父类,则如下:

   public void fun(List<? super Integer> list) {…}

1.增强for循环
LinkedList类:

        LinkedList<String> linkedList = new LinkedList();
        linkedList.add("汉语");
        linkedList.add("英语");
        for(Iterator<String> iterator = linkedList.iterator();iterator.hasNext();){
            System.out.println(iterator.next());
        }

ArrayList类:

        ArrayList<String> strings = new ArrayList<>();
        strings.add("汉语");
        strings.add("英语");
        for(Iterator<String> iterator = strings.iterator();iterator.hasNext();){
            String s = iterator.next();
            System.out.println(s);
        }

Vector类:
特有的迭代器方法:.elements();

        Vector<String> strings = new Vector<>();
        strings.add("汉语");
        strings.add("英语");
        for(Enumeration<String> elements = strings.elements();elements.hasMoreElements();) {
            String s = elements.nextElement();
            System.out.println(s);
        }

猜你喜欢

转载自blog.csdn.net/B_Belief/article/details/83624756