Java语言高级特性之——泛型详解

Java语言高级特性之——泛型

一、泛型的概念及主要作用

定义:泛型即参数化类型,将数据类型作为参数传入,例如List、List等等。
泛型的作用有:
(1)适用于多种数据类型执行相同的代码;
(2)指定容器(Map、List、Set等)的类型,不需要进行强制转换。

二、泛型的使用

可以定义泛型类、泛型接口和泛型方法。

泛型类的定义:

class 类名 {

}

其中T为泛型参数,常用大写字母T、K、V或E表示,也可使用字符串表示,泛型参数允许有多个,如下例:

public class A<T>{
	private T data;
	public A(T data){
		this.data = data;
	}
	public T getData(){
		return data;
	} 
	public void setData(T data){
		this.data = data;
	} 
}

泛型接口的定义:

public interface 类名<泛型参数> {

}

例如:

public interface B<T> {
	public T next();
}

泛型接口的实现有两种方式,一种是实现类也设定为泛型类型,如下例:

public class ImplB<T> implements B<T>{
	@override
	public T next(){
		return null;
	}
}

另一种是给实现类指定具体类型,如下例:

public class ImplB2 implements B<String> {
	@Override
	public String next(){
		return null;
	}
}

泛型类在new一个泛型类的对象时指定具体类型,例如

A a = new A<String>();
B b = new ImplB<String>();

泛型方法的定义:
泛型方法可以定义在普通类中,也可以定义在泛型类或泛型接口中。

如:

public class C {
	/**
	 * next为泛型方法
	**/
	public <T> T next(T ...a){
		return a[a.length/2];
	}
}

泛型方法在调用时指定具体类型:

C c = new C();
c.<String>next("A","B","C");
c.next(12,43,54);//高版本编译器可以省略,自动判定类型。

三、类型变量的限定:作用在类或方法上

public class ArrayAlg {

	/**
	 *类型变量的限定,其中泛型T的具体类型必须实现了CompareTo接口。
	 *extends后可以跟至多一个类或多个接口,顺序是类在最前面,接口在后面,中间用'&'符号连接,
	 *例如<T extends ArrayList&Comparable&List>
	 **/
	public static <T extends Comparable> T min(T a,T b){
		if(a.compareTo(b)>0){
			return a;
		}
		return b;
	}
}

四、泛型的约束和局限性

  • 不能实例化泛型的类型变量,即不能写:new T();
  • 静态域或者方法里不能引用泛型变量,因为对象创建之后才能确定泛型的具体类型,但jvm创建对象时先执行的是静态方法。但是静态的泛型方法可以引用本身的泛型变量。
  • 泛型类型不能指定为基本类型,必须是对象类型。如,不能使用List,而应该用List。
  • 泛型不能用instanceof关键字来判定其具体类型。
  • 不能创建泛型数组。
  • 泛型类不能派生自Exception和Throwable。

五、通配符

通配符常用在方法的参数上。

1.上界

<? extends A> 表示只能传递A及其A的子类类型的参数。主要用于安全地访问数据。 2.下界 <? super A> 表示传递给方法的参数必须是A的超类或A类本身。主要用于安全地写入数据。 ### 六、Java虚拟机是如何实现泛型的? jdk里面进行了泛型擦除,转换为Object类型。当存在限定符时,转换为第一个限定类的类型。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值