通用方法接受不同的数据类型列表

时间:2015-07-21 18:45:51

标签: java generics

我想制作一个接受所有数据类型列表的方法。但它只接受相同的数据类型列表。我在下面做了

@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)它不起作用 有可能吗?

3 个答案:

答案 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)

如果要将任何类型的对象存储在单个列表中,也可以完全跳过泛型。这与实际开发泛型的原因完全相反,即使集合类型安全