gpt4 book ai didi

Java/泛型/数组问题

转载 作者:行者123 更新时间:2023-11-30 06:55:31 24 4
gpt4 key购买 nike

我想最终理解泛型和数组之间的关系,所以我将提供一个对我来说不一致的例子,基于 ArrayList<T> :

Object[] elementData = new Object[size];

这是存储通用列表元素的地方。

public void add(T element){ elementData[size++] = element; }

public T get(int index) { return (T)elementData[index] }

完全有效。我可以弄出底层<T>对象,但是包含对这些对象的引用的数组是 Object .

与此相反:

public Object[] toArray()
{
Object[] result = new Object[size];

for(int i = 0;i<size;i++)
{
result[i] = elementData[i];
}

return result;
}

我无法将返回数组中的元素转换为它们的真实类型,但是整个设置是相同的:Object包含对 <T> 的引用的数组对象。我得到了 ClassCastException尝试将元素转换为其真实类型时出错。

最佳答案

如果您查看 Collection 界面,你看有2个toArray()方法:

  • Object[] toArray()

    Returns an array containing all of the elements in this collection.

  • <T> T[] toArray(T[] a)

    Returns an array containing all of the elements in this collection; the runtime type of the returned array is that of the specified array.

原因是你不能创建通用数组,所以你只能返回一个 Object[]。

为您的 toArray() 制作一个通用方法很简单:

public <T> T[] toArray(T[] arr)
{
T[] result = arr.size == size ? arr : (T[])java.lang.reflect.Array
.newInstance(arr.getClass().getComponentType(), size);

for(int i = 0;i<size;i++)
{
result[i] = elementData[i];
}

return result;
}

关于Java/泛型/数组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35269861/

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