List<? extends Map<String, ?>> data;

解决方案 »

  1.   

    data 类型List
    List里面存储为Map或者它的任何子类
    Map中存储的Key为String类型value为任意
      

  2.   

    这样写,把能校验的都校验一下,比不写的校验性强度大一些;而又比写成<Map>的扩展性大一点!
    但是这样用,有点别扭,平时应该用的不多。
      

  3.   


    追问一下,和下面的有什么区别?List<Map<String, Object>> data; 
      

  4.   


    一楼说的“任意”,改成“未知”更准确一些。区别一: List<? extends Map<String, ?>> data ,不能往 data 添加任何(除了null之外的)元素,因为 data 这个 List 中的元素是 "Map 的某种子类型",具体是哪种子类型不清楚。区别二: 跟区别一相似,遍历data中的元素时, Map<String, ?> 不能 put (除了null之外) 的任何value。
      

  5.   


          Map<String, ?>  m = new  HashMap<String, Object>();
          m.put("one", "two"); //这句话报错感谢8楼,继续追问,
    既然无法添加除null之外的元素,它的用处主要在哪些地方?貌似在定义函数返回类型的时候才有点用。
      

  6.   


    就是这样。定义函数的参数也可以用。
    总的来说,这样定义的变量就是用来读的,不是用来写的。泛型用来做编译时的类型检查。
    wildcard,用来对要检查的类型作更灵活一些的限定。
    wildcard 有 <?> 或者 <? extends XXX> 或者 <? super XXX>。
      

  7.   

    java 泛型,使用的时候都用具体的泛型
      

  8.   


    实际上JAVA的泛型仅仅是语法糖,在编译阶段保证类型的安全性。
    实际上编译通过后,没有什么区别