zoukankan      html  css  js  c++  java
  • JAVA 泛型方法<T>

    public static void main(String[] args) throws Exception {
            String[] arr = new String[]{"1", "2", "3"};
            changeAddr(arr, 0, 2);
            System.out.println(Arrays.toString(arr));
            Person person = new Person();
            //T 作为对象传入,返回一个T类型对象
            String[] arr1 = new String[]{"hhh", "20"};
            //这里可以看到,Person并不需要进行强转,因为返回值类型在传入T的时候在返回值之前的<T>进行了定义,将其定义为了Person
            person = handleData(person, arr1);
            System.out.println(person.toString());
        }
    
        /**
         * 简单的demo,示例交换数组索引位置的值
         *
         * @param arr   传入的数组
         * @param begin 交换索引
         * @param end   交换索引
         * @param <T>   定义的一个类型
         *              <T>表示声明一个泛型类型T,在调用方法,传入参数的时候再确定T的类型,T可以是所有类型,但是确定了是传入的类型,
         *              比如以下方法,传入的为 T[] ,就代表T是声明这个参数的类型使用
         *   其实T可以使用任意的字符代替,但是一般使用 T 表示Type 类型的意思(声明一个类型 )
         *   T通常放在方法的返回值声明之前
         *   T不是一个类。但是因为在之前的<T>定义好了一个泛型T,则泛型类型T可以作为数据类型使用
         *
         *   <> 方法中传入的T,其实就是声明的<T> </>
         */
        static <T> void changeAddr(T[] arr, Integer begin, Integer end) {
            T temp = arr[begin];
            arr[begin] = arr[end];
            arr[end] = temp;
        }
    
        /**
         *  示例使用泛型进行对象的传入与处理
         * @param t 泛型类型
         * @param names 参数值
         * @param <T> 定义的传入与返回的持有对象的类型
         * @return 传入的类型
         * @throws Exception
         */
        static <T> T handleData(T t, String[] names) throws Exception {
            Class c = t.getClass();
            Field[] fields = c.getDeclaredFields();
            Method[] methods = c.getDeclaredMethods();
            for (Field field : fields) {
                //暴力访问
                field.setAccessible(true);
                for (String s : names) {
                    field.set(t, s);
                }
            }
            return t;
        }

     注意:使用泛型之前一定要对泛型进行声明,在返回值之前的<T>就是对泛型类型的声明

    语法:

    public <泛型声明> T methodName(args...);
  • 相关阅读:
    Linux Shell编程入门
    vim 文件在linux不换行,只显示^M解决办法
    服务器高性能程序 磁盘I/O篇
    车牌识别_转自别人的博客
    ubuntu网络简单设置
    C++设计模式(转载)
    结构算法之道
    C++设计模式工厂方法
    二叉树的深度优先遍历、广度优先遍历和非递归遍历
    iptables
  • 原文地址:https://www.cnblogs.com/huanghuanghui/p/10146349.html
Copyright © 2011-2022 走看看