我需要在Java中创建一个接受任意类型的任意数量的数组的方法。我需要知道这是否可行,如果是这样的话?
答案 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;
}