当前位置:编程学习 > JAVA >>

诡异的Java语法,下面这句话神马意思?

List<? extends Map<String, ?>> data; --------------------编程问答-------------------- data 类型List
List里面存储为Map或者它的任何子类
Map中存储的Key为String类型value为任意 --------------------编程问答-------------------- 泛型语法,请翻书再说。 --------------------编程问答--------------------
引用 楼主 meowchina 的回复:
List<? extends Map<String, ?>> data;

这样写,把能校验的都校验一下,比不写的校验性强度大一些;而又比写成<Map>的扩展性大一点!
但是这样用,有点别扭,平时应该用的不多。 --------------------编程问答-------------------- 一楼正解,建议看看泛型的知识 --------------------编程问答-------------------- 泛型啊 是一样的 --------------------编程问答-------------------- 泛型 一楼正解! --------------------编程问答--------------------
引用 3 楼 tiwerbao 的回复:
引用 楼主 meowchina 的回复:
List<? extends Map<String, ?>> data;
这样写,把能校验的都校验一下,比不写的校验性强度大一些;而又比写成<Map>的扩展性大一点!
但是这样用,有点别扭,平时应该用的不多。


追问一下,和下面的有什么区别?

List<Map<String, Object>> data; 

--------------------编程问答--------------------
引用 7 楼 yongger520 的回复:
引用 3 楼 tiwerbao 的回复:引用 楼主 meowchina 的回复:
List<? extends Map<String, ?>> data;
这样写,把能校验的都校验一下,比不写的校验性强度大一些;而又比写成<Map>的扩展性大一点!
但是这样用,有点别扭,平时应该用的不多。

追问一下,和下面的有什么区别?

List<Map<String,……


一楼说的“任意”,改成“未知”更准确一些。

区别一: List<? extends Map<String, ?>> data ,不能往 data 添加任何(除了null之外的)元素,因为 data 这个 List 中的元素是 "Map 的某种子类型",具体是哪种子类型不清楚。

区别二: 跟区别一相似,遍历data中的元素时, Map<String, ?> 不能 put (除了null之外) 的任何value。 --------------------编程问答--------------------
引用 8 楼 raistlic 的回复:
引用 7 楼 yongger520 的回复:
引用 3 楼 tiwerbao 的回复:引用 楼主 meowchina 的回复:
List<? extends Map<String, ?>> data;
这样写,把能校验的都校验一下,比不写的校验性强度大一些;而又比写成<Map>的扩展性大一点!
但是这样用,有点别扭,平时应该用的不多。

追问一下,和下面的有什么区别?

List<……


      Map<String, ?>  m = new  HashMap<String, Object>();
      m.put("one", "two"); //这句话报错

感谢8楼,继续追问,
既然无法添加除null之外的元素,它的用处主要在哪些地方?貌似在定义函数返回类型的时候才有点用。 --------------------编程问答--------------------
引用 9 楼 yongger520 的回复:
貌似在定义函数返回类型的时候才有点用。 


就是这样。

定义函数的参数也可以用。
总的来说,这样定义的变量就是用来读的,不是用来写的。

泛型用来做编译时的类型检查。
wildcard,用来对要检查的类型作更灵活一些的限定。
wildcard 有 <?> 或者 <? extends XXX> 或者 <? super XXX>。 --------------------编程问答--------------------
引用 2 楼 wenzee 的回复:
泛型语法,请翻书再说。

Java的泛型比STL差多了。。。 --------------------编程问答-------------------- java 泛型,使用的时候都用具体的泛型 --------------------编程问答--------------------
引用 7 楼 yongger520 的回复:
引用 3 楼 tiwerbao 的回复:引用 楼主 meowchina 的回复:
List<? extends Map<String, ?>> data;
这样写,把能校验的都校验一下,比不写的校验性强度大一些;而又比写成<Map>的扩展性大一点!
但是这样用,有点别扭,平时应该用的不多。

追问一下,和下面的有什么区别?

List<Map<String,……


实际上JAVA的泛型仅仅是语法糖,在编译阶段保证类型的安全性。
实际上编译通过后,没有什么区别 --------------------编程问答-------------------- 除 --------------------编程问答--------------------
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,