Return 与传入参数相同的 List 实现

Return same implementation of List as passed in parameter

假设我有一个类似于以下的函数:

public static List<Integer> empty(List<Integer> list) {
    List<Integer> empty = new ArrayList<>();
    return empty;
}

我想要 return 一个与传入列表具有相同实现的列表。对于我的示例函数,仅当传入的列表是 ArrayList 时才成立。如何根据 list 的实现初始化一个列表(例如,如果 list 是一个链表,那么 returned 列表将是一个链表)?

不确定你为什么需要这个。对我来说,这是一个糟糕的设计。但是,您可以使用 reflection:

public static List<Integer> empty(List<Integer> list) throws InstantiationException, IllegalAccessException {
    Class<? extends List> c = list.getClass();
    return c.newInstance();
}

注意:以上示例仅在 List 实现 class 具有 public 可访问的空构造函数时才有效,否则您将遇到异常。