假设我有一个类似于以下内容的函数:
public static List<Integer> empty(List<Integer> list) {
List<Integer> empty = new ArrayList<>();
return empty;
}
我想返回一个与传入列表具有相同实现的列表。对于我的示例函数,仅当传入的列表是 ArrayList 时才成立。如何根据 list
的实现初始化列表(例如,如果 list
是 LinkedList,则返回的列表将是 LinkedList)?
最佳答案
不知道为什么你需要这个。对我来说,这是一个糟糕的设计。但是,您可以使用反射
来做到这一点:
public static List<Integer> empty(List<Integer> list) throws InstantiationException, IllegalAccessException {
Class<? extends List> c = list.getClass();
return c.newInstance();
}
注意:上面的示例仅在 List
实现类具有公共(public)可访问的空构造函数时才有效,否则您将收到异常。
关于java - 返回与传入参数相同的 List 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57857751/