Java 使arrayList.toArray()返回更具体的类型
因此,通常Java 使arrayList.toArray()返回更具体的类型,java,arrays,object,types,arraylist,Java,Arrays,Object,Types,Arraylist,因此,通常ArrayList.toArray()会返回一种类型的对象[]…但假设它是 对象的Custom的Arraylist,如何使toArray()返回一种类型的Custom[],而不是object[] arrayList.toArray(new Custom[0]); 它实际上不需要返回对象[],例如:- List<Custom> list = new ArrayList<Custom>(); list.add(new Custom(1));
ArrayList.toArray()
会返回一种类型的对象[]
…但假设它是
对象的Custom
的Arraylist
,如何使toArray()
返回一种类型的Custom[]
,而不是object[]
arrayList.toArray(new Custom[0]);
它实际上不需要返回
对象[]
,例如:-
List<Custom> list = new ArrayList<Custom>();
list.add(new Custom(1));
list.add(new Custom(2));
Custom[] customs = new Custom[list.size()];
list.toArray(customs);
for (Custom custom : customs) {
System.out.println(custom);
}
像这样:
List<String> list = new ArrayList<String>();
String[] a = list.toArray(new String[0]);
List l = new ArrayList<String>();
String[] a = ((List<String>)l).toArray(new String[l.size()]);
因为内部实现无论如何都会重新分配一个大小合适的数组,所以您最好提前完成。由于Java6是首选空数组,请参见
如果您的列表没有正确键入,您需要在调用toArray之前进行转换。像这样:
List<String> list = new ArrayList<String>();
String[] a = list.toArray(new String[0]);
List l = new ArrayList<String>();
String[] a = ((List<String>)l).toArray(new String[l.size()]);
listl=newarraylist();
字符串[]a=((列表)l).toArray(新字符串[l.size()]);
我得到了答案……这似乎工作得非常好
public int[] test ( int[]b )
{
ArrayList<Integer> l = new ArrayList<Integer>();
Object[] returnArrayObject = l.toArray();
int returnArray[] = new int[returnArrayObject.length];
for (int i = 0; i < returnArrayObject.length; i++){
returnArray[i] = (Integer) returnArrayObject[i];
}
return returnArray;
}
public int[]测试(int[]b)
{
ArrayList l=新的ArrayList();
对象[]returnArrayObject=l.toArray();
int returnArray[]=新的int[returnArrayObject.length];
for(int i=0;i
公共静态E[]arrayListToTypedArray(列表){
if(list==null){
返回null;
}
int noItems=list.size();
如果(noItems==0){
返回null;
}
E[]列表类型Darray;
E typeHelper=list.get(0);
试一试{
对象o=Array.newInstance(typeHelper.getClass(),noItems);
listAsTypedArray=(E[])o;
for(int i=0;i
将列表转换为特定类型数组的较短版本(例如Long):
ArrayList中有两个名称相同的方法“toArray()”。从1.5开始,第二个方法采用类型化数组。您是否正在寻找1.5之前版本的解决方案?相关:AFAIK:这与Java作为一个整体有关,因为它无法使用通用构造函数。因此,虽然它知道您需要它来转换String[]或MyObject[]之类的对象,但它不能自己实例化它。如果我们想使用double而不是String呢?它似乎失败了。。。我们可以用双人,但如果我要双人怎么办?@pbs你不能。Java的泛型只支持引用类型,不支持原语。自动装箱/拆箱在很大程度上可以让您忽略它们之间的差异。如果我们有ArrayList,并且它包含扩展了Animal的狗和猫类型,该怎么办?如果第一个元素是狗,第二个元素是猫,那么它似乎会失败。它看到第一个元素,创建一个Dog类型的数组,添加Dog,然后尝试添加cat,但失败了。也可能不适用于泛型E。这是解决该问题的唯一答案。它是有效的。唯一需要注意的是上面关于多态性的评论,但是对于我们其他做json的人来说,它工作得很好?我认为这在Java8中是非法的。。。或者对复杂类型无效。请注意,您的答案没有问题。那么,我的组织使用的是旧的java版本
public static <E> E[] arrayListToTypedArray(List<E> list) {
if (list == null) {
return null;
}
int noItems = list.size();
if (noItems == 0) {
return null;
}
E[] listAsTypedArray;
E typeHelper = list.get(0);
try {
Object o = Array.newInstance(typeHelper.getClass(), noItems);
listAsTypedArray = (E[]) o;
for (int i = 0; i < noItems; i++) {
Array.set(listAsTypedArray, i, list.get(i));
}
} catch (Exception e) {
return null;
}
return listAsTypedArray;
}
Long[] myArray = myList.toArray(Long[]::new);