一、泛型的定义主要有以下两种:
- 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。(这是当今较常见的定义)
- 在程序编码中一些包含参数的类。其参数可以代表类或对象等等。(现在人们大多把这称作模板)
不论使用那个定义,泛型的参数在真正使用泛型时都必须作出指明。
二、使用泛型的目的:
- 一些强类型程序语言支持泛型,其主要目的是加强类型安全及减少类转换的次数,但一些支持泛型的程序语言只能达到部份目的。
- 泛型程序设计(Generic programming)意味着编写的代码可以被很多不同类型的对象所重用。
- 是对java语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值得占位符一样。
【Java泛型的几种类型代码】
一、不使用泛型的代码
我们定义一个Person类,包含三个属性x,y,z。在我们开始定义地时候,我们也不知道这三个属性是用来干什么的,所以我们定义为Object类型。但是在使用的时候,我们分别对x,y,z赋予了int,double,String类型,所以在取出的时候,我们需要把这三个类型值进行强制转换。如下代码:
1. Person.java
1 public class Person { 2 private Object x; 3 private Object y; 4 private Object z; 5 //使用Object类型。可以转化为任何类型 6 public Object getX() { 7 return x; 8 } 9 public void setX(Object x) { 10 this.x = x; 11 } 12 public Object getY() { 13 return y; 14 } 15 public void setY(Object y) { 16 this.y = y; 17 } 18 public Object getZ() { 19 return z; 20 } 21 public void setZ(Object z) { 22 this.z = z; 23 } 24 }
2. NoGenericTest.java
1 public class NoGenericTest { 2 public static void main(String[]args){ 3 Person boy=new Person(); 4 boy.setX(20); 5 boy.setY(22.2); 6 boy.setZ("帅哥TT"); 7 //这里根据设置的不同类型的值,我们需要进行强制类型转化。 8 int x=(Integer)boy.getX(); 9 double y=(double)boy.getY(); 10 String z=(String)boy.getZ(); 11 12 System.out.println(x); 13 System.out.println(y); 14 System.out.println(z); 15 } 16 }
3. 运行结果
1 20 2 22.2 3 帅哥TT
二、使用一个类型变量泛型的代码
我们定义一个泛型类Person,定义三个属性x,y,z,在测试类中,我们设置属性的值,并打印。
1. Person.java
1 public class Person<T> { 2 private T x; 3 private T y; 4 private T z; 5 public T getX() { 6 return x; 7 } 8 public void setX(T x) { 9 this.x = x; 10 } 11 public T getY() { 12 return y; 13 } 14 public void setY(T y) { 15 this.y = y; 16 } 17 public T getZ() { 18 return z; 19 } 20 public void setZ(T z) { 21 this.z = z; 22 } 23 }
2. GenericTest.java
1 public class GenericTest { 2 public static void main(String[]args){ 3 Person boy=new Person(); 4 boy.setX(20); 5 boy.setY(22.2); 6 boy.setZ("帅哥TT"); 7 //不用进行类型转化 8 System.out.println(boy.getX()); 9 System.out.println(boy.getY()); 10 System.out.println(boy.getZ()); 11 } 12 }
3. 运行结果
1 20 2 22.2 3 帅哥TT
三、使用两个类型变量泛型的代码
我们定义一个泛型类Person,定义两个属性x,y,使用了两种不同的类型变量,在测试类中,我们设置属性的值,并打印。
1. Person.java
1 public class Person<T1,T2> { 2 private T1 x; 3 private T2 y; 4 public T1 getX() { 5 return x; 6 } 7 public void setX(T1 x) { 8 this.x = x; 9 } 10 public T2 getY() { 11 return y; 12 } 13 public void setY(T2 y) { 14 this.y = y; 15 } 16 }
2. GenericTest.java
1 public class GenerricTest { 2 public static void main(String[] args){ 3 Person<String,Integer> boy=new Person<String,Integer>(); 4 boy.setX("帅哥TT"); 5 boy.setY(20); 6 System.out.println(boy.getX()); 7 System.out.println(boy.getY()); 8 } 9 10 }
3. 运行结果
1 帅哥TT 2 20
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能