泛型的用法

来源:互联网 发布:摄影网络销售 编辑:程序博客网 时间:2024/06/04 20:03

泛型的用法

泛型是JDK1.5以后出现的新特新,主要是用于解决安全问题,它是一个安全机制。

将运行时期出现的安全问题转移到了编译时期,方便了程序员解决问题,让运行时问题减少。
还有就是避免了强制转换的麻烦

//用一段代码来演示一下泛型用在集合上import java.util.*;class demo01 {    public static void main(String[] args)     {//泛型写在尖括号中,这里的泛型是Stirng,意思就是只能往arr中传String类型的对象        ArrayList <String>arr = new ArrayList<String>();        arr.add("java1");//添加元素        arr.add("java2");        arr.add("java3");        arr.add("java4");//获取一个迭代器,也加了泛型,迭代器迭代就可以直接获得String类型的对象        Iterator <String> it = arr.iterator();        while(it.hasNext()) //判断容器是否为空 返回boolean        {            sop(it.next());//打印元素        }      }    //一个打印的小方法    public static void sop(Object obj)    {        System.out.println(obj);    }}
在没有泛型之前,往集合中添加元素都是靠程序员的主观判断去添加,很容易引发安全问题,引进泛型之后,通过泛型判断添加元素的类型,减少了程序员的主观判断,也大大增加了程序的安全性。

泛型不仅可以定义在集合上,还可以定义在类,函数和接口上!
那什么时候定义泛型类呢?
当类中要操作的引用数据类型不确定的时候,就可以定义泛型类;早期没有泛型的时候,都是通过Object来完成拓展,现在可以用泛型。

//用一段代码演示泛型定义在类上,接口上和函数上class demo02 {    public static void main(String[] args)     {        demo<String> t1 = New demo<String>();        t1.noe(“abc”);//泛型在类上        t1.show(123);//把泛型定义在方法上    }}interface Inter<T>//定义在接口上{    void show(T t);}class Interg<T> implements Inter<T> //类实现接口{    public void show(T t)    {        System.out.println("show"+t);    }}class demo<Q>//泛型定义在类上{    public <B> void one(B b)//方法上定义自己的泛型    {        System.out.println("one:"+b);    }    public void show(Q q)//直接用类上的泛型    {        System.out.println("method:"+q);    }//**静态只能用定义在自己方法上的泛型,不能用定义在类上的泛型    public static <Z> void method(Z z)// 定义在静态方法上的泛型    {        System.out.println("method:"+z);    }}

注意:静态方法不能引用类上定义的泛型,但是可以定义在自己的方法上。

泛型限定
什么是泛型限定呢,就是把泛型限定在一个范围之类,比起单个的泛型,其拓展性又大大增强。这里我们会用到一个特殊字符:? 就是这个问号,叫做通配符,也叫做占位符,就是不知道泛型的具体类型时可以用这个通配符去表示。
在泛型限定有两种限定一种上限,一种下限。
这是限定上限

//用一个例子来说一下/*定义一个person类定义一个学生类继承person定义一个工人类继承person写一个排序方法接收Person可以同时给学生对象和工人对象进行排序使用*/class demo04 {    public static void main(String[] args)     {        //创建一个存储学生类型的集合,加载一个父类的比较器 去比较        TreeSet<students> st = new TreeSet<students>(new sortList());        st.add(new students("marry",12));        st.add(new students("narry",18));        st.add(new students("karry",16));        st.add(new students("zarry",15));        st.add(new students("barry",13));        st.add(new students("garry",16));        st.add(new students("yarry",15));        st.add(new students("rarry",13));        Iterator<students> it = st.iterator();        while(it.hasNext())        {            students s = it.next();            sop(s.getName()+"---"+s.getAge());          }    }    //打印方法    public static void sop(Object obj)    {        System.out.println(obj);    }}//定义一个人的类class Person{    private String name;    private int age;    Person(String name,int age)    {        this.name = name;        this.age = age;    }    public String getName()    {        return name;    }    public int getAge()    {        return age;    }}class students extends Person{//学生类继承了人的类    students(String name,int age)    {        super(name,age);    }}class worker extends Person{//工人类继承了人的类    worker(String name,int age)    {        super(name,age);    }}//这是一个比较器,可以接收Person类的和他的子类class sortList implements Comparator<Person>{    public int compare(Person p1,Person p2)    {        int num = new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));        if(num == 0)        {            return p1.getName().compareTo(p2.getName());        }        return num;    }}
0 0
原创粉丝点击