Java实用教程第二十二讲泛型.pptVIP

  • 3
  • 0
  • 约2.34千字
  • 约 13页
  • 2018-06-30 发布于四川
  • 举报
Java实用教程第二十二讲泛型

第22讲泛型 泛型是指参数化类型的能力,其最初的目的是希望类或方法能够具备最广泛的表达能力。可以定义带泛型类型的类或方法,随后编译器会用具体类型来替换它。在程序中使用泛型的好处是能够在编译时检查出错误,而不是在运行时刻。 第22讲泛型 22.1 泛型 22.2 自定义泛型类和接口 22.4 受限的泛型 22.4 受限的泛型 22.5 原始类型和向后兼容 22.6 通配泛型 讲后练习 22.1 泛型 从JDK1.5开始,Java允许定义泛型类、泛型接口和泛型方法,已经使用泛型对Java API中的类、接口和方法进行了修改。如在JDK1.5之前接口Comparable的定义如下: public interface Comparable { public int CompareTo(Object o) } 而在JDK1.5之后,其定义如下: public interface ComparableT { public int CompareTo(T o) } 从JDK1.5开始,Java允许定义泛型类、泛型接口和泛型方法,已经使用泛型对Java API中的类、接口和方法进行了修改。如在JDK1.5之前接口Comparable的定义如下: public interface Comparable { public int CompareTo(Object o) } 而在JDK1.5之后,其定义如下: public interface ComparableT { public int CompareTo(T o) } 程序中的T(有时为E,两者并无本质区别)表示形式泛型类型,随后可以使用一个实际的具体类型替换它。替换泛型类型称为泛型实例化。 22.2 自定义泛型类和接口 创建“容器(Collection,集合)类”是促使泛型出现的原因之一。泛型可以使集合记住其内各元素的类型,并且能够在编译时找出错误。JDK1.5之后,已经使用泛型对Java API进行了改写,下面程序展示了使用泛型改写后的ArrayList类的用法: import java.util.*; public class TestGenericsAPI { public static void main(String[] args) { ListString list = new ArrayListString(); list.add(hello ); list.add(java ); //list.add(2); for (int i = 0; i list.size(); i++) { String name = list.get(i); System.out.println(name: + name); } } } 22.3 自定义泛型方法 从JDK1.5开始,还可以使用泛型类型来定义泛型方法,在调用方法的时候指明泛型的具体类型。 Java泛型方法在方法返回值是容器类对象时广泛使用。编写Java泛型方法时,返回值类型和至少一个参数类型应该是泛型,而且类型应该一致,如果只有返回值类型或参数类型之一使用了泛型,那么这个泛型方法的使用就会受到很大的限制,几乎和不使用泛型一样。 22.4 受限的泛型 在定义泛型类型时,预设可以使用任何类型来实例化泛型类型。但是如果想限制使用泛型类型时,可以将泛型指定为另一种类型的子类型,即:使用extends关键字指定泛型类型必须继承某个类,或者实现某个接口,也可以是这个类或接口本身。 下面程序展示了使用受限泛型定义的方法: public class RestrictedGenericsMethod { public static E extends Shape boolean equalArea(E obj1,E obj2){ return obj1.getArea() == obj2.getArea(); } public static void main(String[] args) { Circle c = new Circle(20.3); Ranctangle ranc = new Ranctangle(10.4,20.2); MyShapeShape shape = new MyShapeShape(); System.out.println(RestrictedGenericsMethod.equalArea(c, ranc)); } } 22.5 原始类型和向后兼容 可以使用泛型类而不必指定具体类型,如: Box b = new Box(); 它大体等价于: BoxObject b = new Box Obj

文档评论(0)

1亿VIP精品文档

相关文档