首页 > 解决方案 > 使用泛型从动态数组创建静态数组

问题描述

我想从动态数组的任何泛型类型的动态数组创建一个静态数组。我看到返回 Object[] 的 List#toArray() 并且它不使用泛型。将它强制转换为 T[] 是否安全,还是必须从使用它的类的类型实例化整个数组?

我继续尝试创建自己的方法,以防 java 没有提供,但是,我遇到了编译错误

public static <T> T[] toArray(List<T> list)
{
    T[] li = (T[]) Array.newInstance(T.class, list.size());
    int index = 0;
    for(T obj : list)
    {
        li[index++] = obj;
    }
    return li;
}

标签: javaarraysarraylistdynamicstatic

解决方案


首先,你不需要那个方法。您可以使用:

List<String> list = new ArrayList<>();
list.add("ff");
list.add("bb");
String[] array = list.toArray (new String[list.size ()]);

为了使您的方法起作用,您必须传递Class泛型类型参数的 :

public static <T> T[] toArray(List<T> list, Class<T> clazz)
{
    T[] li = (T[]) Array.newInstance(clazz, list.size());
    int index = 0;
    for(T obj : list)
    {
        li[index++] = obj;
    }
    return li;
}

然后您可以使用以下方法调用该方法:

String[] array = toArray(list, String.class);

推荐阅读