Java - 一个接受vararg并返回arraylist的方法?

时间:2016-08-19 08:16:17

标签: java generics arraylist

我对泛型不太满意,因此尚未找到解决方案。我有这三种方法:

public static List<ObjectA> objectAAsList(ObjectA ... items) {
    return new ArrayList<>(Arrays.asList(items));
}

public static List<ObjectB> objectBAsList(ObjectB ... items) {
    return new ArrayList<>(Arrays.asList(items));
}

public static List<ObjectC> objectCAsList(ObjectC ... items) {
    return new ArrayList<>(Arrays.asList(items));
}

如何创建一个单独的方法来获取T(或其他东西)的vararg并创建它的ArrayList?

2 个答案:

答案 0 :(得分:10)

只需用类型变量替换您的类型:

public static <T> List<T> genericAsList(T ... items) {
    return new ArrayList<>(Arrays.asList(items));
}

请注意,您可以查看如何声明Arrays.asList,因为从类型的角度来看,它的确大致相同。

答案 1 :(得分:0)

我认为函数是一种比静态方法更好的方法。您可以定义一个函数:

public class VarArgsToList<T> implements Function<T[], List<T>> {

    @Override
    public List<T> apply(final T... items) {
        return new ArrayList<>(Arrays.asList(items));
    }
}

并在以下任何地方应用:

public static void main(final String... arg) {
    ...
    final List<String> list1 = new VarArgsToList<String>().apply(arg);
    ...
    final List<MyObject> list2 = new VarArgsToList<MyObject>().apply(myObject1, myObject2, myObject3);
     ...
}