gpt4 book ai didi

java - 将通用列表转换为数组。为什么我需要使用克隆?

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:04:48 25 4
gpt4 key购买 nike

昨天我在写作业的时候遇到了一个问题。我完成了作业,但我仍然不明白为什么我的代码可以工作。我必须编写一个排序函数,它将任何可比较的通用对象的可变参数作为参数并返回该参数。问题是我必须返回一个排序对象数组。所以我必须学习更多关于可变参数列表和数组的知识。

函数是这样定义的。

public <T extends Comparable<T>> T[] stableSort(T ... items)

在函数中我制作了一个列表,我会对它进行排序并完成所有工作。

List<T> list = new ArrayList<T>(Arrays.asList(items));

在函数的末尾,我将列表返回给 Array,以便它匹配输出类型 T[]。

list.toArray(items.clone());

我的问题是因为我已经从可变参数中创建了列表,为什么我必须在 toArray 函数中执行 items.clone() 。这对我来说就像在做两件同样的事情。我认为 arrays.asList() 会将数组的值克隆到列表中,但我不明白为什么我要在 toArray() 中的代码末尾再次这样做。我知道这是正确的写法,因为我昨天做完作业,从类(class)的论坛上找到了这种写法,但我仍然不明白为什么。

编辑

该任务要求我创建一个包含已排序文件的新数组并将其返回。由于类型删除,如果不引用适合泛型的类,就不可能实例化泛型类型的数组。但是,可变参数数组的类型为 T,因此我应该克隆一个符合通用约束的类型的数组。我不知道该怎么做。所以我决定使用列表让我在截止日期前的时间更轻松。

最佳答案

My question is since I already made the list from the varargs, why do I have to do items.clone()

你是对的。不幸的是,如果您只是使用 toArray() 方法,编译器将无法确定数组的类型。您应该会收到一个编译错误,提示 无法从 Object[] 转换为 T[]。需要调用 item.clone() 来协助编译器进行类型推断。另一种方法是说 return (T[])list.toArray

也就是说,我不会推荐任何一种方法。将数组转换为列表并首先将其转换回数组并没有什么意义。我没有看到任何您甚至可以从这段代码中理解的重要内容。

关于java - 将通用列表转换为数组。为什么我需要使用克隆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42053547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com