疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

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>();
 
  3、示例
 
  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的父类型对象。下限。一般取出对象的时候用。比如比较器。