当前位置: 首页 > 知识库问答 >
问题:

抽象数据类型:对象数组

董高畅
2023-03-14

所以我有了这个类,我想要一个接受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];
          }
}

共有1个答案

许博达
2023-03-14

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

这意味着你不能做:

  • new O()(这将被擦除到new Object(),编译器不知道如何处理它)
  • new O[](这将被擦除到new Object(),这对编译器也没有帮助)

你能做的就是选角:

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

事实上,在Java的集合框架中就是这样做的。您将得到一个“unchecked”警告,因为编译器不能证明此转换是安全的,但实际上没有其他选择。

另外,关于你的问题,我想指出一些事情,你可能知道,也可能不知道:

    null
 类似资料:
  • 图抽象数据类型(ADT)定义如下: Graph() 创建一个新的空图。 addVertex(vert) 向图中添加一个顶点实例。 addEdge(fromVert, toVert) 向连接两个顶点的图添加一个新的有向边。 addEdge(fromVert, toVert, weight) 向连接两个顶点的图添加一个新的加权的有向边。 getVertex(vertKey) 在图中找到名为 vertK

  • deque 抽象数据类型由以下结构和操作定义。如上所述,deque 被构造为项的有序集合,其中项从首部或尾部的任一端添加和移除。下面给出了 deque 操作。 Deque() 创建一个空的新 deque。它不需要参数,并返回空的 deque。 addFront(item) 将一个新项添加到 deque 的首部。它需要 item 参数 并不返回任何内容。 addRear(item) 将一个新项添加到

  • 队列抽象数据类型由以下结构和操作定义。如上所述,队列被构造为在队尾添加项的有序集合,并且从队首移除。队列保持 FIFO 排序属性。 队列操作如下。 Queue() 创建一个空的新队列。 它不需要参数,并返回一个空队列。 enqueue(item) 将新项添加到队尾。 它需要 item 作为参数,并不返回任何内容。 dequeue() 从队首移除项。它不需要参数并返回 item。 队列被修改。 is

  • 栈的抽象数据类型由以下结构和操作定义。如上所述,栈被构造为项的有序集合,其中项被添加和从末端移除的位置称为“顶部”。栈是有序的 LIFO 。栈操作如下。 Stack() 创建一个空的新栈。 它不需要参数,并返回一个空栈。 push(item)将一个新项添加到栈的顶部。它需要 item 做参数并不返回任何内容。 pop() 从栈中删除顶部项。它不需要参数并返回 item 。栈被修改。 peek()

  • 问题内容: 为什么我不能实例化一个抽象类,但要使一个抽象类数组组成? 问题答案: 实例化意味着创建一个类的实例。在上述情况下,您刚刚声明了一个类型为size 的类型(只是引用,没有其他内容)。这就是为什么它不会引发任何错误。 当您尝试做时,您会得到错误 但是做一个抽象类的数组? 稍后,您可以执行以下操作 这是非常允许的,这就是为什么您首先要参加抽象类的原因。

  • 类使程序员可以构造对象的属性(attribute,表示为数据成员)和行为(behavior)或操作(operation,表示为成员函数)。C++ 中用关键字 class 定义包含数据成员和成员函数的类型。 成员函数在有些面向对象编程语言中也称为方法(method),响应对象接收的消息(message)。消息对应于一个对象发给另一个对象或由函数发给对象的成员函数调用。 一旦定义了一个类,可以用类名声