泛型

来源:互联网 发布:印度废钞令 知乎 编辑:程序博客网 时间:2024/06/03 22:56

8. 泛型

8.1简介:

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

好处:

1.将运行时期出现问题ClassCastException,转移到了编译时期。,

         方便于程序员解决问题。让运行时问题减少,安全。,

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

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

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

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

其实<> 就是用来接收类型的。

当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。

8.2泛型类

泛型类定义的基本语法格式:

  Class  泛型类名<类型变量1,类型变量2,····,类型变量n>

{

     //创建已存在集合类的泛型类对象

     Public 已存在集合类型名<类型变量1,类型变量2,····,类型变量n>  对象名=new 已存在的集合构造<类型变量1,类型变量2,····,类型变量n > ();

     //通过方法过载,来覆盖原集合类中的方法

     Public  void 原集合类中方法名 (类型变量1,类型变量2,····,类型变量n)

{

   对象名.原集合类中方法名 (类型变量1,类型变量2,····,类型变量n);

}

····;

}

使用泛型定义一个新的List序列集合类型,使之只能用于存储Double类型的数据。通过方法的过载,重写了需要使用的LinkedList类中的几种方法:

import java.util.*;

class NewList<Double>

{

  //创建新的List集合类型对象list,使其存储内容都Double类型数据

  public List<Double> list = new LinkedList<Double>();

  //方法过载:向LinkedList中添加数据

  public void add(Double d)

  {

         list.add(d);

  }

  //方法过载:获取LinkedList中index指定位置的数据

  public Double get(int index)

  {

         return list.get(index);

  }

  //方法过载:获取Iterator对象

  public Iterator<Double> iterator()

  {

         return list.iterator();

  }

  //方法过载:移除LinkedList中index指定位置的数据

  public Double remove(int index)

  {

         return list.remove(index);

  }

  //方法过载:设置LinkedList中index指定位置的数据

  public Double set(int index,Double d)

  {

         return list.set(index,d);

  }

}

8.3泛型方法:

是否拥有泛型方法,与其所在的类是否泛型没有关系。要定义泛型方法,只需将泛型参数列表置于返回值前。如:

public <T> void f(T x) {}

    使用泛型方法时,不必指明参数类型,编译器会自己找出具体的类型。泛型方法除了定义不同,调用就像普通方法一样。

    最后,需要注意的是,一个static方法,无法访问泛型类的类型参数,因为类还没有实例化,所以,若static方法需要使用泛型能力,必须使其成为泛型方法。

8.4泛型接口:

     在定义泛型接口类的时候,在接口类名后使用一对尖括号“<>”来声明一组类型变量,以逗号间隔变量列表。

interface Demo<T> {// 定义泛型接口

    publicvoid print(T param);// 定义抽象方法,此方法输出参数

}

// 实现泛型接口,方法一:

class Imple1<T>implements Demo<T> {

    publicvoid print(T param) {

        System.out.println("param = " + param);

    }

}

//实现泛型接口,方法二:

class Imple2implements Demo<Imple2> {

    publicvoid print(Imple2 param) {

        System.out.println("param = " + param);

    }

}

publicclassGenericsDemo {

    publicstaticvoid main(String[] args) {

        // 对以上程序进行测试

        Imple1<String> demo = new Imple1<String>();

        demo.print("Hello, Wrold!");

        

        Imple2 im = new Imple2();

        im.print(new Imple2());

    }

}

原创粉丝点击