java - 使用泛型从动态数组创建静态数组
问题描述
我想从动态数组的任何泛型类型的动态数组创建一个静态数组。我看到返回 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;
}
解决方案
首先,你不需要那个方法。您可以使用:
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);
推荐阅读
- sql - 在 apex 中基于 2 种不同类型的用户进行自定义身份验证
- c# - 使用 SSH.NET 从配置字符串加载 SSH 私钥时出现“Renci.SshNet.Common.SshException:无效的私钥文件”
- jquery-ui-draggable - 如何移动附加的 div?
- python - 地图输出列表破坏地图结果
- php - 使用 ajax 提交表单:工作正常,现在不工作?
- typo3 - PHP 警告: class_parents(): object or string expected
- activemq - ActiveMQ:转换 OpenWire 和 STOMP 消息
- .htaccess - 如何从 URL 中删除文件和参数名称但保留参数值?
- php - 如何指示 Doctrine 的迁移工具忽略外键约束
- scala - Scala:如何从 RDD 中获取 PortableDataStream 实例的内容