泛型

使用泛型机制编写的程序代码要比那些杂乱地使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。

class A<T>{

 //定义了一个泛型类,里面所有的变量,和方法参数,返回值都是T类型

private T a;

public T q(T a){

   return a;

}

}

泛型方法  

public (static)<Q> Q a(Q a){

return a;//定义在方法返回值前面,可以再泛型类中,也可以在普通类中,使用 类实例.<类型(可以省略)>a(xxx) 

Q可以extends。<Q extends A&B&C>Q可以继承一个类和实现多个接口,表示只有继承或实现接口的类才能用这个方法。泛型类也可以extends

}

泛型替换,擦除

虚拟机中没有泛型,只有普通的类和方法。所有的类型参数都用它们的限定类型替换。桥方法被合成来保持多态。为保持类型安全性,必要时插入强制类型转换。

1.不能用基本类型实例化类型参数 class A<double>

2.运行时类型查询只适用于原始类型 A instanceof B<T> 后面的T省略

3.不能抛出也不能捕获泛型类实例,泛型类扩展Throwable都不合法

泛型类不能继承Exception,不能catch(T t){}等等。
4.参数化类型的数组不合法 A<String>[] a =new A<String>[10]; 
5.不能实例化类型变量

不能使用像new T(...), new T[...]或T.class这样的表达式中的类型变量。

6.泛型类的静态上下文中类型变量无效,不能在静态域或方法中引用类型变量

7.注意擦除后的冲突


泛型类可以扩展或实现其他的泛型类A<T> extends B<T>


通配符
A<? extends B>表示任何继承B的类。使用这个只能get不能set

? extends B get();

void set(? extends B)

A<? super B>表示 任何B的父类。只能set,不能get.

? super B get();

void set(? super B);

带有超类型限定的通配符可以向泛型对象写入,带有子类型限定的通配符可以从泛型对象读取。

<T extends Comparable<? super T>>表示comparable可以是T类型也可以是T的父类型。


无线定限定符A<?>get得到的是Object,set不能用

? get();

void set(?);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值