Java--泛型--泛型与数组&泛型与反射

  1.  

  2.  

    package com.model.fanxing;
    
    import java.lang.reflect.Array;
    import java.util.ArrayList;
    import java.util.Arrays;
    
    /**
     * @Description:测试类
     * @Author: 张紫韩
     * @Crete 2021/7/1 17:55
     * 泛型与数组
     * 泛型与反射
     */
    public class FanXingDemo11 {
        public static <T> void main(String[] args) {
            /**
             * 1.可以声明代泛型的数组对象,但是不能直接创建带泛型的数组对象
             * 2.可以通过java.lang.reflect.Array 的newInstance(Class<T> ,int) 创建T[]数组
             * */
            //1.
            //可以声明带泛型的数组对象,但是不能直接new 创建带泛型的数组对象,(数组和泛型时相冲突)
    //        ArrayList<String>[] list=new ArrayList<String>[5];
            ArrayList<T>[] arrayLists=new ArrayList[5];  //声明泛型的引用,创建不带泛型的数组对象,泛型引用指向这个对象就可以了
            ArrayList<String> list1 = new ArrayList<>();  //传概念
            ArrayList<Integer> list2 = new ArrayList<>();
            list1.add("a");
            list2.add(100);
            arrayLists[0]= (ArrayList<T>) list1;
            arrayLists[1]= (ArrayList<T>) list2;
            System.out.println(arrayLists[0]+"\t"+arrayLists[1]);
            System.out.println("----------------------------");
    
    
            ArrayList<String>[] lists=new ArrayList[5];  //要直接创建不带放行的数组对象
            ArrayList<String> list = new ArrayList<>();  //传概念
            list.add("张紫韩");
            lists[0]=list;
    //      lists[1]=list2;  :声明的String类型的数组,不能添加Integer类型的元素 
            System.out.println(lists[0].get(0));
    
            //2.通过Array.newInstance(tClass, length); 创建泛型类的数组
            System.out.println("---------------------------");
            Fruit<String> strFruit = new Fruit<>(String.class,5);
            strFruit.put(0, "张紫韩0");
            strFruit.put(1, "张紫韩1");
            strFruit.put(2, "张紫韩2");
            String[] arr = strFruit.getArr();
            System.out.println(Arrays.deepToString(arr));
            for (String s:arr){
                System.out.println(s);
            }
    
    
        }
    
    
    }
    class Fruit<T>{
    //    private T[] arr=new T[5]; :错误 T是不确定的数据类型,而数组编译时需要数据类型。相冲突所以不能创建成功
    //    Class<T> tClass : T类型的Class类对象
          private T[] arr;
    
        public Fruit(Class<T> tClass,int length) {
    
            this.arr = (T[]) Array.newInstance(tClass, length);
        }
        public void put(int index,T item){
            arr[index]=item;
        }
        public T get(int index){
            return arr[index];
        }
        public T[] getArr(){
            return arr;
        }
    }

     

     

  3.   

    package com.model.fanxing;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.InvocationTargetException;
    
    /**
     * @Description:测试类
     * @Author: 张紫韩
     * @Crete 2021/7/1 22:27
     */
    public class FanXingDemo12 {
        public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
    
            /**
             * Class 和 Constructor都支持泛型,
             *
             * */
            Class<Person> personClass = Person.class;
            Constructor<Person> constructor = personClass.getConstructor();
            Person person = constructor.newInstance();
    
            Class personClass1 = Person.class;
            Constructor constructor1 = personClass1.getConstructor();
            Object o = constructor1.newInstance(); //当不使用泛型是,创建的对象就是Object类型的
    
        }
    }
    class Person{
    
    }
posted @ 2021-07-01 22:41  张紫韩  阅读(98)  评论(0编辑  收藏  举报