gpt4 book ai didi

java - 抽象数据类型 : Array of objects

转载 作者:行者123 更新时间:2023-12-01 12:57:19 25 4
gpt4 key购买 nike

所以我有这个类,我想要一个接受 int 的方法,并创建一个该大小的新数组。如果我声明

newArray<Object<int,int>> array1 = new newArray<Object<int,int>>(10);

这将创建一个大小为 10 的数组。

<小时/>

我尝试过这样做

    public class newArray<O>
{

private O[] array;

public newArray(int newArraySize)
{
newArray<O>[] = new newArray<O>[newArraySize];
}
}

但我收到“无法创建 newArray 的通用数组”错误。

最佳答案

不幸的是,您无法创建通用数组。这是由于 Java 中泛型的实现方式是通过类型删除来实现的。实际上,所有泛型类型在编译之前都会被“删除”为其边界类型(通常是 Object ),因此编译器看到的所有内容都是 Object 。而不是TEO 。删除过程会生成自动转换,以确保程序仍按预期工作。

这意味着你不能这样做:

  • new O() (这会被删除为 new Object() ,编译器不知道如何处理)
  • new O[] (这会被删除为 new Object() ,这对编译器来说又没有帮助)

可以做的是转换:

array = (O[]) new Object[size];

事实上,这就是 Java 集合框架中的实现方式。您将收到“未经检查”的警告,因为编译器无法证明此转换是安全的,但确实没有其他选择。

此外,关于您的问题,我想指出一些您可能已经知道或不知道的事情:

  • 不能使用基元作为类型参数
  • Object没有类型参数
  • newArray<O>[] = new newArray<O>[newArraySize];确实应该是array = new newArray<O>[newArraySize]; 。您已经声明了要使用的数组。所以就用它吧!

看起来您正在实现自己的 ArrayList , 实际上。如果你是,祝你好运!如果不是,您确实应该使用现有的实现,除非您需要一些否则无法获得的特殊行为...

关于java - 抽象数据类型 : Array of objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23772151/

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