美文网首页
理解Java泛型和示例

理解Java泛型和示例

作者: yekai | 来源:发表于2017-10-13 14:29 被阅读0次

泛型是Java 1.5的引入的特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

Java泛型被引入的好处是安全简单。
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

泛型在使用中还有一些规则和限制:
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends、super语句,例如。习惯上成为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class classType = Class.forName(java.lang.String);

泛型还有接口、方法等等,内容很多,需要花费一番功夫才能理解掌握并熟练应用。在此给出我曾经了解泛型时候写出的两个例子(根据看的印象写的),实现同样的功能,一个使用了泛型,一个没有使用,通过对比,可以很快学会泛型的应用,学会这个基本上学会了泛型70%的内容。

示例1 使用Java泛型

class Gen<T> {  
private T ob; //定义泛型成员变量  
 
public Gen(T ob) {  
this.ob = ob;  
}  
 
public T getOb() {  
return ob;  
}  
 
public void setOb(T ob) {  
this.ob = ob;  
}  
 
public void showType() {  
System.out.println("T的实际类型是: " + ob.getClass().getName());  
}  
}  
 
public class GenDemo {  
public static void main(String[] args){  
//定义泛型类Gen的一个Integer版本  
Gen<Integer> intOb=new Gen<Integer>(88);  
intOb.showType();  
int i= intOb.getOb();  
System.out.println("value= " + i);  
 
System.out.println("----------------------------------");  
 
//定义泛型类Gen的一个String版本  
Gen<String> strOb=new Gen<String>("Hello Gen!");  
strOb.showType();  
String s=strOb.getOb();  
System.out.println("value= " + s);  
}  
} 

示例2 未使用Java泛型

public class Gen2 {  
 private Object ob; //定义一个通用类型成员  
 
 public Gen2(Object ob) {  
this.ob = ob;  
 }  
 
 public Object getOb() {  
return ob;  
 }  
 
 public void setOb(Object ob) {  
this.ob = ob;  
 }  
 
 public void showType() {  
System.out.println("T的实际类型是: " + ob.getClass().getName());  
 }  
}  
 
public class GenDemo2 {  
 public static void main(String[] args) {  
//定义类Gen2的一个Integer版本  
Gen2 intOb = new Gen2(new Integer(88));  
intOb.showType();  
int i = (Integer) intOb.getOb();  
System.out.println("value= " + i);  
 
System.out.println("----------------------------------");  
 
//定义类Gen2的一个String版本  
Gen2 strOb = new Gen2("Hello Gen!");  
strOb.showType();  
String s = (String) strOb.getOb();  
System.out.println("value= " + s);  
 }  
} 

运行结果:
两个例子运行Demo结果是相同的,控制台输出结果如下:

T的实际类型是: java.lang.Integer  
value= 88 
----------------------------------  
T的实际类型是: java.lang.String  
value= Hello Gen!  
 
Process finished with exit code 0 

看明白这个,以后基本的Java泛型应用和代码阅读就不成问题了。

相关文章

  • 理解Java泛型和示例

    泛型是Java 1.5的引入的特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型...

  • 【JAVA】浅谈Java范型

    1.Java泛型是什么?2.通常的泛型的写法示例3.类型擦除4.为什么要使用Java泛型5.通过示例了解PECS原...

  • Java泛型使用示例整理

    Java泛型使用示例整理 目标 Java泛型编程是JDK1.5版本后引入的。泛型让编程人员能够使用类型抽象,通常用...

  • Java 泛型擦除原理

    问:请比较深入的谈谈你对 Java 泛型擦除的理解和带来的问题认识? 答:Java 的泛型是伪泛型,因为在编译期间...

  • 泛型琐碎之泛型上下限

    泛型的命名规范 为了更好地去理解泛型,我们也需要去理解java泛型的命名规范。 为了与java关键字区别开来,ja...

  • Java自学-泛型 通配符

    Java 泛型通配符 ? extends super 的用法 示例 1 : ? extends ArrayList...

  • java泛型理解及应用

    内容: java泛型理解及应用

  • Java 泛型

    java 泛型 很多朋友对java的泛型不是很理解,很多文章写的已不是很清楚,这篇博客对java泛型进行 一个总结...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • 反射获取泛型类型

    参考:步步理解 JAVA 泛型编程(一)

网友评论

      本文标题:理解Java泛型和示例

      本文链接:https://www.haomeiwen.com/subject/khyzyxtx.html