【发布时间】:2020-12-27 07:40:04
【问题描述】:
Java中如何根据输入变量的未知List类型声明变量?
例如::
给定 arr1,你需要从 arr1 (浅)复制到 arr2。但是你不知道 arr1 是什么类型的列表。
这是我使用的代码,如果我要声明arr2,我必须遍历所有可能的List类型的情况。
static List<Object> funcOri(List<Object> arr1, List<Object> arr2) {
if (arr1 instanceof ArrayList<?>) {
arr2 = new ArrayList<Object>(arr1);
} else if (arr1 instanceof LinkedList<?>) {
arr2 = new LinkedList<Object>(arr1);
} else if (...) {
;
}
return arr2;
}
根据 arr1 的类型声明 arr2 有没有更简单的方法?
也许只是看起来像::
static List<Object> funcWanted(List<Object> arr1, List<Object> arr2) {
arr2 = new XXXList<Object>(arr1); // where XXXList is base on the type of list the arr1 is
return arr2;
}
【问题讨论】:
-
你不需要重新创建
arr2 = new ArrayList<Object>(arr1),因为它已经是ArrayList了。 -
通常与 arr1 的确切列表类型无关。如果您需要 arr1 的副本,则对 arr2 的实际列表类型的决定应基于您要对 arr2 执行的操作,即如果您要在任意位置插入项目,LinkedLisr 可能会更好。但在大多数情况下,ArrayList 就足够了。
-
如果你真的需要提供同一个类的拷贝对象,可以使用
clone()方法或者反射来创建原始列表的实例:@ 987654325@
标签: java declare variable-types