自定义泛型

来源:互联网 发布:网络媒介的优点 编辑:程序博客网 时间:2024/04/27 02:08

           java的泛型借鉴于C++的模板函数,但没有C++模板函数功能强大,java的泛型基本上完全是在编译器中实现,适用于编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码

           实例:交换数组中的两个元素

           private static <T> void swap(T[] a, int i, int j)

            {

                   T tmp = a[i];

                   a[i] = a[j];

                   a[i] = tmp;

             }

            在上例中如果T[]是int[]则出错,因为只有引用类型才能作为泛型方法的实际参数

            在定义泛型时可以使用extends限定符,并且可以用&来制定多个边界,如<T extends Serializable&cloneable> void method(){};

            构造方法、静态方法、普通方法都可以使用泛型,不允许创建类型变量的数组

            在泛型中可同时有多个类型变量,用逗号分隔

            泛型类的应用:public class GenericDao<T>{};

             类级别的泛型是根据引用该类名时指定的类型信息来参数化类型变量的

            例如:GenericDao<String> dao = null;

                    new GenericDao<String>();

            类级别泛型注意:

                    在对泛型进行参数化时,类型参数的实例必须是引用类型,不能是基本类型

                    当一个变量被声明为泛型时,只能被实例变量和方法调用(还有内嵌类型),而不能被静态变量和静态方法调用。静态成员是被所有参数化的类所共享的,所以静态成员不应该有类级别的类型参数。

                  利用反射获得泛型的实际参数类型

                  Method applyMethod = NewMain.class.getMethod("appliy", Vector.class);
                  Type[] type  = applyMethod.getGenericParameterTypes();//获取泛型参数
                  ParameterizedType Par = (ParameterizedType) type[0];
                  System.out.println(Par.getRawType());//原始类型
                  System.out.println(Par.getActualTypeArguments()[0]);//实际类型参数可有多个,返回数组      
       
                    public static void appliy(Vector<String> Vec){

                  }

原创粉丝点击