java泛型数组

2022-11-03  本文已影响0人  arkliu

泛型数组

image.png
public class Fruit<T> {
    private T[] arr;
    
    public Fruit(Class<T>clz, int length) {
        // 通过Array.newInstance创建泛型数组
        arr = (T[]) Array.newInstance(clz, length);
    }
    
    // 填充数组
    public void put(int index, T t) {
        arr[index] = t;
    }
    
    public T get(int index) {
        return arr[index];
    }
    
    public T[] getArr() {
        return arr;
    }
    
    public static void main(String[] args) {
        Fruit<String> fruit = new Fruit<>(String.class, 3);
        fruit.put(0, "香蕉");
        fruit.put(1, "火龙果");
        fruit.put(2, "桃子");
        System.out.println(Arrays.toString(fruit.getArr()));
    }
}

可变参数

public static void printNum(int a, double ... num) {
        System.out.println(a);
        for (int i = 0; i < num.length; i++) {
            System.out.println(num[i]);
        }
    }

反射获取泛型信息

public class Generic {
    public void print(Map<String, User> map, List<User> list) {
        
    }
    
    public Map<String,User> getOne() {return null;}
    
    public static void main(String[] args) throws NoSuchMethodException, SecurityException {
        Method printMethod = Generic.class.getDeclaredMethod("print", Map.class, List.class);
        Type[] types= printMethod.getGenericParameterTypes();
        for (Type type : types) {
            System.out.println(type.getTypeName());
            if (type instanceof ParameterizedType) {
                Type[] types2 = ((ParameterizedType) type).getActualTypeArguments();
                for (Type type2 : types2) {
                    System.out.println(type2);
                }
            }
        }
        
        System.out.println("===============");
        Method getOneMethod = Generic.class.getDeclaredMethod("getOne");
        Type type3= getOneMethod.getGenericReturnType();
        if (type3 instanceof ParameterizedType) {
            Type[] types2 = ((ParameterizedType) type3).getActualTypeArguments();
            for (Type type2 : types2) {
                System.out.println(type2);
            }
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读