泛型通配符的用法,原因??

解决方案 »

  1.   

    试想一下,你有一个方法接受任何一种泛型的Collection作为参数,返回这个集合的数量,
    集合可以是set, list, queue, 集合也可以包含不同对象。你该怎么写呢?你可以用raw type去解决,但是并不推荐
    public void getCollectionSize(Collection theCollection){
     return theCollection.size();
    }如果使用参数类,就必须用到通配符了
    public void getCollectionSize(Collection<?> theCollection){
     return theCollection.size();
    }这样 getCollectionSize 就可以接受任何集合类,比如 strings, numbers 还有objects
    List<String> strings = new ArrayList<>();

    Set<Integer> numbers = new HashSet<>();

    Deque<Object> objects = new ArrayDeque<>();
         
      

  2.   

    void shellSort(int a[]) {
    int gap = a.length;// 增量
    int j;
    while (gap > 1) {
    gap = gap / 3 + 1; // 以一定的增量进行跳跃式比较和交换
    for (int i = gap; i < a.length; i++) {
    int temp = a[i];
    for (j = i - gap; j >= 0 && temp < a[j]; j -= gap) {
    a[j + gap] = a[j];
    }
    a[j + gap] = temp;
    }
    }
    }
      

  3.   

    泛型通配符是实现多态的一种方式,类似于C++中的模板类。提高代码的复用度。
    然而JAVA中的泛型,由于在运行期间是擦除泛型信息的,所以称之为一种“类型安全保障”更合适点。
      

  4.   

    写个简单的例子给你
    /****User extends People****/
    ArrayList<People> list ;
    ArrayList<User> list2 = new ArrayList<User>();
    list = list2;  //这里会报错
    -------------------------------------
    ArrayList<? extends People> list ;//这么写的话就可以
    ArrayList<User> list2 = new ArrayList<User>();
    list = list2; 通配符你可以简单的理解为 类型的通配