概念
泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。
优点
泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
应用
泛型类
<span style="font-family:FangSong_GB2312;font-size:18px;">public class FanXingLeiDemo<T> {//这里是泛型,可以传任意的参数
private T obj;
public T getObj() {
return obj;
}
public void setObj(T obj) {
this.obj = obj;
}
}</span>
实现:
public class FanXingMain {
public static void main(String[] args) {
FanXingLeiDemo<String> fxd = new FanXingLeiDemo<String>();
fxd.setObj("hahaha");
System.out.println(fxd.getObj());
}
}
泛型方法
<span style="font-family:FangSong_GB2312;font-size:18px;">public class FanXingMethod {
public <T> void show(T t){
System.out.println(t);
}
}
</span>
实现:
<span style="font-family:FangSong_GB2312;font-size:18px;">public class FangXingMethodMain {
public static void main(String[] args) {
FanXingMethod fxm = new FanXingMethod();
fxm.show(100);
fxm.show("shshh");
fxm.show(true);
}
}</span>
泛型接口
<span style="font-family:FangSong_GB2312;font-size:18px;">public interface Inter<T> {
public abstract void show(T t);
}
</span>
实现接口:
<span style="font-family:FangSong_GB2312;font-size:18px;">public class InterImpl<T> implements Inter<T> {
@Override
public void show(T t) {
// TODO 自动生成的方法存根
System.out.println(t);
}
}</span>
实例化:
<span style="font-family:FangSong_GB2312;font-size:18px;">public class InterMain {
public static void main(String[] args) {
Inter<String> in = new InterImpl<String>();
in.show("hahah");
}
}
</span>
总结
泛型不是允许你什么都往里扔,恰恰相反,是不允许你什么都往里扔,所以才能保证类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。但是在类型还没有确定下来之前,你可以给它赋予任何类型,这就是它灵活的地方。