泛型:参数化类型,即因为类型的不肯定性,咱们能够引入一个参数来表示代替某种类型.数组
为何须要泛型呢?看如下例子:ide
- /**
- *
- */
- package com.skywares.generic;
- /**
- * @author Administrator
- *
- */
- public class PrintArray {
- /**
- * @param args
- */
- public static void main(String[] args) {
- Integer[] iray = { 1, 2, 3, 4 };
- Character[] cray = { 'a', 'b', 'c', 'd' };
- printMe(iray);
- printMe(cray);
- }
- private static void printMe(Character[] cray) {
- for (Character x : cray) {
- System.out.println(x);
- }
- }
- private static void printMe(Integer[] iray) {
- for (Integer x : iray) {
- System.out.println(x);
- }
- }
- }
在这段程序中,咱们有两个重载的方法printMe,一个须要的参数是Character[],另外一个是Integer[],具体的方法处理部分基本一致,只是只为数组中的元素类型不一样,咱们就须要为它定义两个方法来处理,试想一下,若是未来要增长一个打印String, Double, 某一用户自定义类型的Java对象数据时,咱们岂不是要n屡次地去重载printMe(Type array)这个方法.spa
试想一下,若是咱们可以一种类型去表明要传入地数组中的元素,就像一个参数去表明未来要传递过来的值,那么,咱们就能够不用去重载这个printMe()方法了.因此参数化类型(泛型)就应运而生了.对象
如下是使用泛型方法改造后的代码:string
- /**
- *
- */
- package com.skywares.generic;
- /**
- * @author Administrator
- *
- */
- public class PrintArrayUseGeneric<T> {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Integer[] iray = { 1, 2, 3, 4 };
- Character[] cray = { 'a', 'b', 'c', 'd' };
- String[] sray = {"ab","bc","cd"};
- printMe(iray);
- printMe(cray);
- printMe(sray);
- }
- private static <E> void printMe(E[] tray)
- {
- for(E e : tray)
- {
- System.out.print(e);
- }
- System.out.println();
- }
- }
若是未来有用户自定义的类要进行打印的话,只须要这个类实现自已的toString()方法便可.可扩展性极好.it