黑马程序员_Java泛型的概述及使用

来源:互联网 发布:cast sql oracle 编辑:程序博客网 时间:2024/04/19 17:23

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

一、泛型概述

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

      

好处:

       1,将运行时期的问题ClassCastException转到了编译时期。

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

      

什么时候用:

当操作的引用数据类型不确定的时候。就使用泛型(<>)。将要操作的引用数据类型传入即可,其实<>就是一个用于接收具体引用数据类型的参数范围。  

在程序中,只要用到了带有<>的类或者接口,就要明确传入的具体引用数据类型。

泛型技术是给编译器使用的技术,用于编译时期。确保了类型的安全。

运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除。

泛型的通配符:?未知类型。

 

二、泛型的使用

import java.util.*;

publicclass GenericDefineDemo4

{

    publicstaticvoid main(String[] args)

    {

       ArrayList<String> arr=new ArrayList<String>();

      

       arr.add("java01");

       arr.add("java02");

       arr.add("java03");

       arr.add("java04");

      

       Iterator<String> it=arr.iterator();

              while(it.hasNext())

       {

           System.out.println(it.next());

       }

             

    }

   

}

三、泛型类

1、格式

class ClassName<datatype>

{

}

2、优点

便于对任何未知的的数据类型进行操作,特别适合用作工具类,避免了强制类型转换的麻烦。

3.示例

import java.util.*;

publicclass GenericClass

{

    publicstaticvoid main(String[] args)

    {

 

       Tools<String> tools=new Tools<String>("hello");

       System.out.println(tools.getObj());

      

    }

}

class Tools<T>

{

    private T obj;

   

    public Tools(T t)

    {

       this.obj=t;

    }

 

    public T getObj() {

       returnobj;

    }

 

    publicvoid setObj(T obj) {

       this.obj = obj;

    }

   

   

}

 

四、泛型方法

    当只需要某一个方法可以接收不同类型的参数,而不是整个类的时候,就可以用到泛型方法,它将大大提高程序代码的扩展性。

示例代码如下:

import java.util.*;

publicclass GenericMethod

{

    publicstaticvoid main(String[] args)

    {

       String s="hello!Nice to meet you!";

       Integer inter=3;

      

       Show show=new Show();

       show.print(s);

       show.print(inter);

             

    }

      

}

 

class  Show

{

    public  <Q> void print(Q q)

    {

       System.out.println(q);

    }

}

五、静态泛型方法

1、格式

public static <T> methodName(T param)

{

}

2、特点

由于静态方法不可以访问类中的泛型,如果静态方法操作的类型不确定,这可以把泛型定义在静态方法上。

3、示例

publicstatic <Q> void print(Q q)

    {

       System.out.println(q);

    }

六、泛型接口

1、格式

interface Inter<T>

{

    void show(T t);

}

2、特点

当接口要操作的数据类型不确定的时候,就可以使用泛型接口。

注意:

当实现接口的类已经确定了接口具体的类型时,创建对象时就不用再指明类型了,如:

class InterImpl implements Inter<String>

{

   

}

如果实现类仍不知道具体的类型,就要创建对象时指明,如:

class InterImpl<T> implements Inter<T>

{

}

InterImpl<String> im=new InterImpl<String>();

三、示例

 

import java.util.*;

public class Test

{

    public static void main(String[] args)

    {

       InterImpl<String> im=new InterImpl<String>();

       im.print("hello");

      

    }

 

}

 

interface Inter<T>

{

    void print(T t);

}

 

class InterImpl<T> implements Inter<T>

{

    public void print(T s)

    {

       System.out.println(s);

    }

}

七、泛型extends限定

? extends E:接收E类型或者E的子类型对象。上限

一般存储对象的时候用。比如添加元素 addAll.

 

八、泛型super限定

? super E:接收E类型或者E的父类型对象。下限。

一般取出对象的时候用。比如比较器。

 

原创粉丝点击