我对泛型不太满意,因此尚未找到解决方案。我有这三种方法:
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?
答案 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);
...
}