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 可访问的空构造函数时才有效,否则您将遇到异常。
假设我有一个类似于以下的函数:
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 可访问的空构造函数时才有效,否则您将遇到异常。