javaAPI-集合框架(泛型)

来源:互联网 发布:淘宝有哪几种营销方式 编辑:程序博客网 时间:2024/05/20 01:12


泛型概述

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

好处:

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

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

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

 

在使用java提供的对象时,什么时候写泛型呢?

通常在集合框架中很常见。只要见到<>就要定义泛型。

泛型类

什么时候定义泛型类?

当类中要操作的引用数据类型不确定的时候。早期定义Object来完成扩展。现在定义泛型来完成扩展。

示例:

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

泛型方法

泛型类定义的泛型在整个类中有效。如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。所以,为了让不同方法可以操作不同类型,而且类型还不确定。那么可以将泛型定义在方法上。

静态泛型方法

特殊之处,静态方法不可以访问类上定义的泛型。

如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。

例:public static <T> void method(T t){}

 

泛型定义在接口上示例:

interface Inter<T>{void show(T t);}class InterImpl<T> implements Inter<T>{public void show(T t){System.out.println("show :"+t);}}class GenericDemo{public static void main(String[] args) {InterImpl<Integer> i = new InterImpl<Integer>();i.show(4);}}

类型不确定时怎么办?

当我们对象的类型不确定的时候,用<?>如:public static void demo(ArrayList<?> al){}

<?>与<T>的区别

T:代表具体类型,传进来什么就是什么类型。

?:代表不确定类型,它是一个通配符,也可以理解为占位符。

<?>好处:提高了扩展性。弊端:不能使用类型的特有方法。如:length();

泛型限定

泛型限定有两个限制 1.上限  我可以向上限定             2.下限  我可以向下限定

格式:

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

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

<? super E>示例:

import java.util.*;class GenericDemo {public static void main(String[] args) {TreeSet<Student> ts = new TreeSet<Student>(new Comp());ts.add(new Student("abc03"));ts.add(new Student("abc02"));ts.add(new Student("abc06"));ts.add(new Student("abc01"));Iterator<Student> it = ts.iterator();while(it.hasNext()){System.out.println(it.next().getName());}TreeSet<Worker> ts1 = new TreeSet<Worker>(new Comp());ts1.add(new Worker("wabc--03"));ts1.add(new Worker("wabc--02"));ts1.add(new Worker("wabc--06"));ts1.add(new Worker("wabc--01"));Iterator<Worker> it1 = ts1.iterator();while(it1.hasNext()){System.out.println(it1.next().getName());}}}class Comp implements Comparator<Person>{public int compare(Person p1,Person p2){return p2.getName().compareTo(p1.getName());}}class Person{private String name;Person(String name){this.name = name;}public String getName(){return name;}public String toString(){return "person :"+name;}}class Student extends Person{Student(String name){super(name);}}class Worker extends Person{Worker(String name){super(name);}}

总结:

          泛型的好处是避免了强转,把错误移到了编译时期,提高了安全性。

            泛型除了可以定义在类上,还可以定义在方法上。

            泛型限定是用于泛型扩展用的。如果不明确类型可以用<?>来占位。


 

 


 

 

 


 


 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击