Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使arrayList.toArray()返回更具体的类型_Java_Arrays_Object_Types_Arraylist - Fatal编程技术网

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);