// 子类
            class Child extends Parent{
            public int age;
            public Child(String name, int age){
            super(name);
            this.age = age;
            }
            public String toString(){
            return super.toString() + ";  age = " + age;
            }
            } 
            public class GeneralProgram {
            /**
            * 在命令行输出一个集
            * 使用问号?通配符,?代表任何类型,所以它的参数可以是任何类型的Collection。
            */
            public static void printCollection(Collection< ?> collect){
            if (collect == null){
            return;
            }
            for(Object obj : collect){
            System.out.print(obj + "    ");
            }
            System.out.println();
            }
             	   /**
            * 使用有限制的通配符“? extends”,可以接受任何Parent及其子类的Collection
            * @param collect
            */
            public static void printNames(Collection< ? extends Parent> collect){
            if (collect == null){
            return;
            }
            for(Parent parent : collect){
            System.out.print(parent.name + "    ");
            }
            System.out.println();
            }
                  /**
            * 范型方法,将一个任意类型的数组,添加到列表中。
            * @param < T> 代表一个任意的类
            * @param datas	数组对象
            * @return
            */
                 public static < T> List< T> arrayToList(T[] datas){
            if (datas == null){
            return null;
            }
            List< T> list_T = new ArrayList< T>();
            for (T x : datas){
            list_T.add(x);
            }
            return list_T;
            }
             	/**
            * 范型方法,在一组Parent对象中查找名字为name的Parent对象
            * @param < T>	可以是Parent对象或者子类对象
            * @param parents	Parent对象组
            * @param name	目标name
            * @return	匹配的Parent对象
            */
                  public static < T extends Parent> T findParent(T[] parents, String name) {
            if (parents == null) {
            return null;
            }
            T parent = null;
            // 依次遍历Parent对象组
            for (T x : parents) {
            // 如果Parent对象的name与参数name匹配,则退出遍历
            if (x.name.equals(name)) {
            parent = x;
            break;
            }
            }
            // 返回
            return parent;
            }
            public static void main(String[] args) {
            /** * 指定具体的类型 ** */
            // 声明一个用于装字符串的列表,该列表只能装字符串类型的对象
            List< String> list_S = new ArrayList< String>();
            list_S.add("first");
            list_S.add("second");
            list_S.add("third");
                     // 不能装整数对象
            Integer iObj = 10;
            // list_S.add(iObj);// error!!!
            // 在从列表中取值时,不用作强制类型转换。
            String firstS = list_S.get(0);
            String thirdS = list_S.get(2);
            System.out.println("firstS: " + firstS + "; thirdS: " + thirdS);
                     /** **范型和继承** */
            // String 继承 Object
            String s = "sss";
            Object o = s;
            // 但List< String>不继承List< Object>
            // List< Object> list_O = list_S;// error!!!
                     /** * 通配符 *** */
            // 调用具有“?”通配符的方法
            List< Integer> list_I = new ArrayList< Integer>();
            list_I.add(5555);
            list_I.add(6666);
            list_I.add(7777);
            // 该方法既可以打印整型列表,也可以打印字符串列表
            printCollection(list_I);
            printCollection(list_S);
                     // 调用具有“? extends” 通配符的方法
            // 只接受父类以及子类类型的列表
            List< Parent> list_Parent = new ArrayList< Parent>();
            list_Parent.add(new Parent("parentOne"));
            list_Parent.add(new Parent("parentTow"));
            list_Parent.add(new Parent("parentThree"));
            List< Child> list_Child = new ArrayList< Child>();
            list_Child.add(new Child("ChildOne", 20));
            list_Child.add(new Child("ChildTow", 22));
            list_Child.add(new Child("ChildThree", 21));
            printNames(list_Parent);
            printNames(list_Child);
                     // 不能接受其他类型的参数
            // printNames(list_S);// error!!!
            /** * 范型方法 *** */
                     // arrayToList方法将任意类型的对象数组变成相应的列表
            Integer[] iObjs = { 55, 66, 77, 88, 99 };
            // 转换整型数组
            List< Integer> result_I = arrayToList(iObjs);
            printCollection(result_I);
                     String[] ss = { "temp", "temptemp", "hehe", "he", "hehehe" };
            // 转换字符串数组
            List< String> result_S = arrayToList(ss);
            printCollection(result_S);
            // findParent方法在一组Parent对象中根据name查找Parent
            Parent[] parents = { new Parent("abc"), new Parent("bcd"),new Parent("def") };
                     Parent parent = findParent(parents, "bcd");
            System.out.println("找到的bcd:" + parent);
            Child[] children = { new Child("abc", 22), new Child("bcd", 23),ew Child("def", 22) };
            Child child = findParent(children, "bcd");
            System.out.println("找到的bcd:" + child);
            // 但是不能在字符串数组中进行查找
            // String sss = findParent(ss, "temp");// error!!!
            }
            }
            运行结果:
            C:\java>java   GeneralProgram firstS: first; thirdS: third 5555    6666    7777 first    second    third parentOne    parentTow    parentThree ChildOne    ChildTow    ChildThree 55    66    77    88    99 temp    temptemp    hehe    he    hehehe 找到的bcd:name = bcd 找到的bcd:name = bcd;  age = 23
            
             |