泛型程序设计是一种程序设计风格,泛型允许程序员在强类型程序设计语言中编码代码时可以使用一些以后才指定的类型,在实例化时作为参数指明这些类型。
定义:
1.在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。(常见的定义)
2.在程序编码中一些包含参数的类。参数可以代表类或者对象等等。(现在大多数称为模板)
目的:
1.加强类的安全。
2.减少类的转换次数。
Java 泛型的参数只可以代表类,不能代表个别对象。由于Java泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型,而且无法直接使用基本值类型作为泛型类型参数。Java编译程序在编译泛型时会自动加入类型转换的编码,故运行速度不会因为使用泛型而加快。
由于运行时会消除泛型的对象实例类型信息等缺陷经常被人诟病,Java及JVM的开发方面也尝试解决这个问题,例如Java通过在生成字节码时添加类型推导辅助信息,从而可以通过反射接口获得部分泛型信息。通过改进泛型在JVM的实现,使其支持基本值类型泛型和直接获得泛型信息等。
疑问:
为什么基本数据类型不能为泛型类类型参数,而他们的包装类却可以?
答:
不能用类型参数代替基本类型:例如,没有Pair<double>,只有Pair<Double>,其原因是类型擦除。擦除之后,Pair类含有Object类型的域,而Object不能存储double值。这体现了Java语言中基本类型的独立状态。