我想制作一个接受所有数据类型列表的方法。但它只接受相同的数据类型列表。我在下面做了
@SafeVarargs
public static <E> List<E> mergeArray(List<E> ...list) {
List<E> result = new ArrayList<E>();
for(List<E> temp : list) {
result.addAll(temp);
}
return result;
}
public static void main(String[] args1) {
List<String> l1 = Arrays.asList("Hello", "World");
List<Double> l2 = Arrays.asList(2.3, 2.2, 4.5);
List<Integer> l3 = Arrays.asList(1, 2,3);
List<String> l4 = Arrays.asList("Hello1", "World1");
System.out.println(mergeArray(l1, l2));
}
此处方法mergeArray
仅接受mergeArray(l1, l4)
//相同的数据类型
如果我传递了不同的数据类型,则表示mergeArray(l1,l2) or mergeArray(l1,l2,l3)
它不起作用
有可能吗?
答案 0 :(得分:1)
Java中的泛型并不意味着您可以放入任何对象,即List<Object>
。它适用于所有对象类型,但它们在使用时都需要具有相同的对象类型。这是通过一个名为Erasure的过程。你可以阅读它here。
答案 1 :(得分:1)
肯定可能,但我不确定它有用。这是使用有界通配符类型参数执行此操作的方法,但并不一定要求返回类型为List<Object>
:
public static <E> List<E> mergeArray(@SuppressWarnings("unchecked") List<? extends E> ...list) {
List<E> result = new ArrayList<E>();
for(List<? extends E> temp : list) {
result.addAll(temp);
}
return result;
}
答案 2 :(得分:0)
如果要将任何类型的对象存储在单个列表中,也可以完全跳过泛型。这与实际开发泛型的原因完全相反,即使集合类型安全