Java——泛型

泛型就像一个模板,编写好的代码可以被很多不同类型的对象重用。解决的问题就是滥用Object类型变量,然后强转。

如何自定义一个泛型类呢?
泛型类就是具有一个或多个类型变量的类,典型的就是ArrayList,经常用到。

public class Gen<T>{
private T first;
private T second;
public Gen(){}
public Gen(T first,T second){this.first=first;this.second=second;}
public T getFirst(){return first;}
public void setFirst(T value){first=value;}
}

在类名后面加上< T>即可,在java库中E表示集合的元素类型,K表示表的键类型,V表示值类型。T表示任意类型(还可以使用U或S)。
泛型方法
上面的get,set就是泛型方法,不局限于泛型类中,也可以定义在普通类中。
类型限制
如果要对类型变量进行限制,通过T来设置就行。如:

public static <T extends Comparable & Serivalizable> T method(){...} 

这样写就表示T必须是他们的子类才可传入。
底层原理
在虚拟机中是没有泛型概念的,不管你定义的是什么泛型类,都会翻译成原始类型(如果有限定就是限定类型,没有限定就是Object类型),当我们去调用泛型方法时,编译器插入强制类型转换,也就是说编译器会将返回的Obejct类型,强转为我们定义的类型。
通配符
Gen< ? extends Comparable>
更高深的用法:

public < T extends Comparable< ? super T>> T method(){...}

注意
1.不能用基本类型实例化类型参数;比如Gen< double>是错误的,原因就是Object不能存储double值,但可以用Gen< Doubel>。
2.不能创建参数化类型的数组
如Gen< String> t=new Gen< String>[10];是错误的。
3.不能构造泛型数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值