泛型

泛型

java允许定义泛型类,泛型接口,泛型方法。

支持泛型的动机:看下面两段代码

public interface Comparable{
    public int compareTo(Object o);
}

这里<T>表示泛型类型,使用中可以用具体类型替换它。注意,泛型类型必须是引用类型,不能用int, double, char这些基本类型,应该使用Integer, Double, Character。(自动打包,自动解包)

public interface Comparable<T>{
    public int compareTo(T o);
}

这两段代码在对两个不同类型的对象进行比较时,第一段是运行时报错,而第二段在编译期间就报错了,由此可见,泛型的主要优势是能够在编译时而不是运行时发现错误,泛型可以使程序更加可靠。

受限泛型:将泛型指定为另一种类型的子类型,这种泛型叫做受限泛型。

泛型类

为了定义一个类为泛型类型,需要将泛型类型放在类名之后,例如,GenericStack<E>

泛型类的构造方法是public GenericStack(),而不是public GenericStack<E>()

泛型类可以有多个参数,如,GenericStack<E1, E2, E3>

泛型方法

为了定义一个方法为泛型方法,要将泛型类型放在方法返回类型之前,例如,<E> void max (E var1, E var2)

通配泛型类型有三中形式,?, ? extends T, ? super T,这里T代表一个泛型类型。第一种形式称为非受限通配,第二种称为受限通配,代表T或者T的一个子类型,第三种称为下限通配,表示T或者T的一个父类型。

  • 使用类型消除的方法来实现泛型,编译器使用泛型类型信息来编译代码,但是随后消除它。因此泛型信息在运行时是不可用的。
  • 不能使用泛型类型来创建实例
  • 不能使用泛型类型参数来创建数组。
  • 不能在静态环境中使用类的泛型类型参数
  • 在异常类中不能使用泛型类型参数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值