设为首页 - 加入收藏 宝鸡站长网 (http://www.0917zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 纽约 诈骗 一些
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

Java 中的 T,E,K,V, 别傻傻分不清楚!

发布时间:2019-09-21 06:36 所属栏目:[优化] 来源:glmapper
导读:前言 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 泛型带来的好处 在没有泛型的情况的下,通

前言

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。

泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。

Java 中的 T,E,K,V, 别傻傻分不清楚!

泛型带来的好处

在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就是一个安全隐患。

那么泛型的好处就是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的。

  1. public?
  2. ??
  3. class?
  4. ??
  5. GlmapperGeneric?
  6. ?{?
  7. ?
  8. ?????????
  9. private?
  10. ?T?t;?
  11. ?
  12. ?????
  13. public?
  14. ??
  15. void?
  16. ?set(T?t)?{??
  17. this?
  18. .t?=?t;?}?
  19. ?
  20. ?????
  21. public?
  22. ?T?get()?{??
  23. return?
  24. ?t;?}?
  25. ?
  26. ?
  27. ?
  28. ?????
  29. public?
  30. ??
  31. static?
  32. ??
  33. void?
  34. ?main(?
  35. String?
  36. []?args)?{?
  37. ?
  38. ?????????
  39. //?do?nothing?
  40. ?
  41. ????}?
  42. ?
  43. ?
  44. ?
  45. ???
  46. /**?
  47. ?
  48. ????*?不指定类型?
  49. ?
  50. ????*/?
  51. ?
  52. ???
  53. public?
  54. ??
  55. void?
  56. ?noSpecifyType(){?
  57. ?
  58. ?????
  59. GlmapperGeneric?
  60. ?glmapperGeneric?=??
  61. new?
  62. ??
  63. GlmapperGeneric?
  64. ();?
  65. ?
  66. ????glmapperGeneric.set(?
  67. "test"?
  68. );?
  69. ?
  70. ?????
  71. //?需要强制类型转换?
  72. ?
  73. ?????
  74. String?
  75. ?test?=?(?
  76. String?
  77. )?glmapperGeneric.get();?
  78. ?
  79. ?????
  80. System?
  81. .out.println(test);?
  82. ?
  83. ??}?
  84. ?
  85. ?
  86. ?
  87. ???
  88. /**?
  89. ?
  90. ????*?指定类型?
  91. ?
  92. ????*/?
  93. ?
  94. ???
  95. public?
  96. ??
  97. void?
  98. ?specifyType(){?
  99. ?
  100. ?????
  101. GlmapperGeneric?
  102. String?
  103. >?glmapperGeneric?=??
  104. new?
  105. ??
  106. GlmapperGeneric?
  107. ();?
  108. ?
  109. ????glmapperGeneric.set(?
  110. "test"?
  111. );?
  112. ?
  113. ?????
  114. //?不需要强制类型转换?
  115. ?
  116. ?????
  117. String?
  118. ?test?=?glmapperGeneric.get();?
  119. ?
  120. ?????
  121. System?
  122. .out.println(test);?
  123. ?
  124. ??}?
  125. ?
  126. }?

上面这段代码中的 specifyType 方法中 省去了强制转换,可以在编译时候检查类型安全,可以用在类,方法,接口上。

泛型中通配符

我们在定义泛型类,泛型方法,泛型接口的时候经常会碰见很多不同的通配符,比如 T,E,K,V 等等,这些通配符又都是什么意思呢?

常用的 T,E,K,V,?

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章