您的位置:首页 > 编程语言 > Java开发

Java_泛型的基本应用

2014-10-10 15:36 204 查看
泛型是为了统一存入数据的类型额特别设计的新特性

好处:将运行时期的问题ClassCastException转到了编译时期。

   避免了强制转换的麻烦。

运行时,回去掉泛型,生产的class文件中是不带泛型的,称为泛型的擦除

-----------------------------------------------------------------------------------------------------

泛型可用在类,方法,静态方法,接口上

-----------------------------------------------------------------------------------------------------

泛型的基本使用

import java.util.*;

publicclass GenericDefineDemo4{

publicstaticvoid main(String[] args){

ArrayList<String> arr=new ArrayList<String>();//定义一个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());

}

}

}

-----------------------------------------------------------------------------------------------------

泛型类:格式:class ClassName<datatype>

   {

   }

优点:便于对任何未知的的数据类型进行操作,

特别适合用作工具类,避免了强制类型转换的麻烦。

泛型类示例:import java.util.*;

publicclass GenericClass{

publicstaticvoid main(String[] args){

Tools<String> tools=new Tools<String>("hello");//创建一个类,制定存入的数据类型为String

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

}

}

class Tools<T>{//定义一个泛型类,不指定存入的具体类型,用 T 代替

private T obj;

public Tools(T t){ //构造方法

this.obj=t;

}

public T getObj() {//定义get方法,返回值为T

return obj;

}

publicvoid setObj(T obj) {

this.obj = obj;

}

}

-----------------------------------------------------------------------------------------------------

泛型方法:当只需要某一个方法可以接收不同类型的参数,

而不是整个类的时候,就可以用到泛型方法,

它将大大提高程序代码的扩展性。

泛型方法示例:import java.util.*;

publicclass GenericMethod{

publicstaticvoid main(String[] args){

String s="hello!Nice to meet you!";//定义String类型参数

Integer inter=3;//定义Integer类型参数

Show show=new Show();//创建一个带泛型方法的类

show.print(s);//调用类中的泛型方法,输出String类型的数据

show.print(inter);//调用类中的泛型方法,输出Interge类型的额数据

}

}

class Show{

public <Q> void print(Q q){//将放行定义在方法上,不指定具体类型

System.out.println(q);

}

}

-----------------------------------------------------------------------------------------------------

静态泛型方法:格式:public static <T> methodName(T param)

   {

   }

特点:由于静态方法不可以访问类中的泛型,

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

示例:public static <Q> void print(Q q)//类似于泛型方法

    {

   System.out.println(q);

   }

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

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

如:class InterImpl implements Inter<String>{//Inter已经明确了泛型类型

    }

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

如:class InterImpl<T> implements Inter<T>{//Inter没有明确泛型

   }

   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>{//实现未ing去泛型类型的接口

public void print(T s){

System.out.println(s);

}

}

  

-----------------------------------------------------------------------------------------------------

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

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

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

   一般取出对象的时候用。比如比较器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: