美文网首页
java泛型数组

java泛型数组

作者: arkliu | 来源:发表于2022-11-03 09:26 被阅读0次

泛型数组

  • 可以声明带泛型的数组引用,但是不能直接创建带泛型的数组对象


    image.png
image.png
  • 可以通过java.lang.reflect.Array的newInstance(Class<T>,int) 创建T[]数组
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);
            }
        }
    }
}

相关文章

  • Android 开发也要掌握的Java知识 - Java泛型

    如果需要看泛型擦除Java泛型擦除 1.Java泛型有什么用?为啥要使用泛型? Java中数组的类型是定义的时候就...

  • scala 与 java泛型数组

    java 泛型数组初始化 使用这样的方式初始化java的数组会出错,因为java不支持泛型数组。按照我的理解,ja...

  • 泛型

    java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一Java泛型深入理解加泛型面试数组的协变性与范型的不可变性

  • [Java菜鸟系列] 泛型数组的问题是「体制」问题

    J006-[Java菜鸟系列] 泛型数组的问题是「体制」问题 菜鸟:Java为什么不支持泛型数组? 老湿:上一次提...

  • 泛型 枚举 反射 动态代理 类加载 类的生命周期--复习笔记

    泛型 Java中没有所谓的泛型数组一说 list E表示类型形参 可以接受具体的类型实参; 泛型接口 泛型类...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • 九、泛型

    九、泛型 尽量不要写这种有能与泛型方法重载的代码,有迷惑性 限定传入 T 的类型 泛型数组 Java 不支持泛型类...

  • Java - 泛型数组

    Java不允许创建泛型数组的原因 Quora - Why-does-Java-prohibit-generic-a...

  • Java泛型——泛型和数组

    集合和数组到处都可以看到,灵活运用这两个工具也是很重要的,可以发现,在我们实际的业务代码中,都是运用的泛型而非数组...

  • 第二十八课:泛型

    泛型出现之前 泛型出现之后 Java深度历险(五)——Java泛型

网友评论

      本文标题:java泛型数组

      本文链接:https://www.haomeiwen.com/subject/hbeltdtx.html