泛型整理
2018-12-28 08:03:32来源:博客园 阅读 ()
泛型整理
1.泛型的使用环境
泛型是在jdk1.5及1.5以上的版本可以使用。
2.泛型的参数命名约定
-
E - Element,主要由Java Collections框架使用。
-
K - Key,主要用来表示地图的参数类型。
-
V - 值,主要用于表示地图的参数类型值。
-
N - 数字,主要用于表示数字。
-
T - Type,主要用于表示第一个泛型类型参数。
-
S - Type,主要用于表示第二个泛型类型参数。
-
U - Type,主要用来表示第三个泛型类型参数。
- V - Type,主要用于表示第四个泛型类型参数。
3.普通泛型实例
1 public class GenericsDemo { 2 3 public static void main(String[] args) { 4 // TODO Auto-generated method stub 5 Student<String,Integer> student = new Student<String,Integer>(); 6 student.setAge(25); 7 student.setName("大志"); 8 9 System.out.println("获取到的数据为 :"+student.getName()+"&&"+student.getAge()); 10 fun(student) ; 11 12 } 13 14 public static void fun(Student<?,?> newStudent){ 15 System.out.println("使用通配符的方式:"+newStudent.getName()+"&&"+newStudent.getAge()); 16 } 17 18 } 19 20 class Student<T,S>{ 21 private T name; 22 private S age; 23 24 public T getName() { 25 return name; 26 } 27 public void setName(T name) { 28 this.name = name; 29 } 30 public S getAge() { 31 return age; 32 } 33 public void setAge(S age) { 34 this.age = age; 35 } 36 37 }
注:这里有一点需要留意,那就是此处的代码14行中使用到了通配符<?>;
通配符可以表示任意的类型;
而<T>里面的内容只能替代输入时指定的类型。
4.受限泛型
受限泛型包括了两种:受限下界<T extends<S>>和受限上界<T super<S>>,使用这种方式也会使得代码变得更复杂,但对应的是可扩展得逻辑性确大大提高。
这里先解释下这两种方式区别:
1.<T extends<S>>这种方式表示:在调用使用这种受限泛型的方式时,T可以是S得子类,用集合表示即T是S得子集(可以S==T);
2.<T super<S>>这种方式表示:在调用使用这种受限泛型的方式时,S可以是T得子类,用集合表示即S是T得子集(可以S==T);
下面用图来描述一下这两种的区别:
1).受限下界<T extends<S>>:
2).受限上界<T super<S>>:
这两张图转自:https://www.cnblogs.com/drizzlewithwind/p/6100164.html,感谢分享。
下面用代码来表示:
1 public class GenericsDemo { 2 3 public static void main(String[] args) { 4 // TODO Auto-generated method stub 5 Point<Integer> p1 = new Point<Integer>(); 6 Point<Float> p2 = new Point<Float>(); 7 p1.setT(10086); 8 p2.setT(10010F); 9 fun1(p1); 10 fun1(p2); 11 System.out.println("======================="); 12 Point<Number> p3 = new Point<Number>(); 13 Point<Object> p4 = new Point<Object>(); 14 p3.setT(5); 15 p4.setT(new Object()); 16 fun2(p3); 17 fun2(p4); 18 19 } 20 21 public static void fun1(Point<? extends Number> p){// 只能接收Number及其Number的子类 22 System.out.println("受限泛型下界方式:"+p.getT()); 23 } 24 25 public static void fun2(Point<? super Number> p){// 只能接收Number及其Object类型 26 System.out.println("受限泛型上界方式:"+p.getT()); 27 } 28 29 } 30 31 class Point<T>{ 32 private T t; 33 34 public T getT() { 35 return t; 36 } 37 38 public void setT(T t) { 39 this.t = t; 40 } 41 42 }
以上是我对泛型方式的理解,欢迎大家指出错误和不足之处,谢谢。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 1-Java基础回顾整理_01 2020-06-10
- logstash系列-入门整理 2020-06-10
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-09
- Java3个编程题整理 2020-06-09
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash