我需要一个接受任何类型对象的数组或ArrayList

时间:2013-11-21 22:17:04

标签: java arrays methods arraylist

我需要在Java中创建一个接受任意类型的任意数量的数组的方法。我需要知道这是否可行,如果是这样的话?

5 个答案:

答案 0 :(得分:4)

List<Object> array = new ArrayList<Object>();

每个类都是类型对象,所以这应该这样做。

答案 1 :(得分:1)

您可以创建一个接受任何类型数组的方法,如下所示:

public <T> void MyMethod(List<T> mylist){
    System.out.println(mylist);
}

答案 2 :(得分:1)

要回答问题的标题,

Object是所有对象的超集。所以你可以通过创建一个Object类型数组来实现它。您可以在该数组中插入任何类型。

例如

ArrayList<Object> list = new ArrayList<Object();

回答你的问题,即创建一个可以接受任意类型数组的方法,使用变量参数。

例如

public void method(Object ... params) { <your code>  }  

// This method will accept any number of parameters of any type.
// If it is specific to ArrayLists, use ArrayList<Object> as the parameter type.

答案 3 :(得分:0)

  

接受数组,并使它们成为最长的数组

数组的ArrayList是一种很好的方法。 Arrays.copyOf使用null

填充较短的数组
void f(ArrayList<Object[]> list){
        int maxLen = 0;
        for(int i=0;i<list.size();i++){
            maxLen = Math.max(maxLen, list.get(i).length);
        }

        for(int i=0;i<list.size();i++){
            if(list.get(i).length < maxLen)
            list.set(i, Arrays.copyOf(list.get(i), maxLen));
        }
    }

答案 4 :(得分:0)

由于所有数组都是对象,因此您可以使该方法采用Object的varargs。这是如何按字面意思做你所要求的。如果排除基元数组(强制包装类型如Integer[]Boolean[]),这可能会有所简化,因此参数为Object[]...。然后你不需要反射和大的长if / else块,并且可以返回List<Object[]>。在那种情况下,该方法会更短。否则这种事情很不方便。

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
import java.util.ArrayList;

public static List<Object> conform(Object... arrays) {
    ArrayList<Object> out = new ArrayList<Object>(arrays.length);

    int longest = 0;
    for (Object a : arrays) {
        if (!a.getClass().isArray()) {
            throw new IllegalArgumentException(a + " not an array");
        }
        int length = Array.getLength(a);
        if (length > longest) longest = length;
    }

    for (Object a : arrays) {
        if (a instanceof Object[]) {
            out.add(Arrays.copyOf((Object[])a, longest));

        } else if (a instanceof boolean[]) {
            out.add(Arrays.copyOf((boolean[])a, longest));

        } else if (a instanceof char[]) {
            out.add(Arrays.copyOf((char[])a, longest));

        } else if (a instanceof byte[]) {
            out.add(Arrays.copyOf((byte[])a, longest));

        } else if (a instanceof short[]) {
            out.add(Arrays.copyOf((short[])a, longest));

        } else if (a instanceof int[]) {
            out.add(Arrays.copyOf((int[])a, longest));

        } else if (a instanceof long[]) {
            out.add(Arrays.copyOf((long[])a, longest));

        } else if (a instanceof float[]) {
            out.add(Arrays.copyOf((float[])a, longest));

        } else if (a instanceof double[]) {
            out.add(Arrays.copyOf((double[])a, longest));
        }
    }

    return out;
}