黑马程序员——泛型

------- android培训java培训、期待与您交流! ----------

泛型:JDK1.5后出现的新特性。用于解决安全问题,是一个类型安全机制。

数组在定义的时候就明确了类型,所以数组比较安全。

集合定义要明确类型:如:

ArrayList <String> al=new ArrayList<String>();
Iterator<String> it=al.iterator();
泛型的出现:

1.将运行时期出现的问题ClassCastException,转移到了编译时期,方便于程序员解决问题,让运行时期的问题减少;

2.避免了强制转换的麻烦


泛型格式:通过<>来定义要操作的引用数据类型。

理解:和代码int x=9;的x一样,代码ArrayList <T> al=new ArrayList<T>();中的T也是一个变量,只不过,x是整形变量,T为类型变量(String,Integer,Long等等)


泛型常见于集合框架中。例:

class MyComparator implements Comparator<String>{
public int compare(String s1,String s2){}
}

Comparable中也有泛型,Object类中的equal()方法则不能有泛型的定义(如果定义了就不是覆盖此方法了)。


自定义泛型类:其实也不复杂,将QQ看成任意类型就行,直观点就看成String,然后Integer也能用,注意上面的理解。

class Utils<QQ>{
private QQ q;
public void setObject(QQ q){
this.q=q;
}
public QQ getObject(){
return q;
}
}


自定义泛型方法:

class Utils{
public <T> void show(T t){
...}
public <Q> void show(Q q){
...}
}

在类中定义一个泛型,在方法中还可以定义另一个泛型。


特殊:静态方法不能访问类上定义的泛型,但可以定义在静态方法上:

public static <W> void method(W w){
//注意<W>要定义在返回值之前,修饰符之后
}

自定义泛型接口:

interface Inter<T>{
...}

class InterImpl<T> implements Inter<T>//还未实现泛型
class InterImpl implements Inter<String>//已指定泛型

泛型的高级应用:

<?>:问号为通配符,指任意类型,与<T>相同。

<? extends E>:可以接收E类型或E的子类型。E为上限

<? super E>:可以接收E类型或E的父类型。E为下限

重点理解下限(比较难理解):

TreeSet(Comparator(? super E) comparator)

如:有一个父类Person,两子类:Student和Worker,定义一个比较器将他们各自的元素排序,其中比较器:

class PersonComp implements Comparator<Person>

class StudentComp implements Comparator<Student>

class WorkerComp implements Comparator<Worker>

          比较器                                      比较器接口   泛型类

如果要排序用的方法一样,就不用按上面那样各自定义一个比较器,直接定义第一个PersonComp(即两泛型类的父类比较器),然后另两个子类在TreeSet传元素的时候,先构造一个TreeSet,然后将PersonComp直接放入即可。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值