加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

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

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

前言

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

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

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

泛型带来的好处

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

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

  1. public 
  2.   
  3. class 
  4.   
  5. GlmapperGeneric 
  6. <T> { 
  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.  

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

泛型中通配符

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

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

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读