-2

我声明了一个对象数组。是否可以使用我的自定义节点类而不是通用对象数组?这是我的代码:

Object[] pos = new Object[28];
pos[1] = new HashSet<String>();

我的节点类只包含字符串值。我尝试直接这样做,但它不起作用。

Node[] pos = new Node[28];
pos[1] = new HashSet<String>();
4

4 回答 4

1

不,你不能做你所做的事情:当你声明一个 type 数组时Node,只有 type 的对象Node或通过继承从它派生的类型可以是数组元素。

这适用于Object[]数组的原因是它Object是每个 Java 对象的基类。HashSet<String>对象可以转换为类型java.lang.Object,但不能转换为不相关的类型Node

于 2013-04-27T13:14:01.137 回答
1
  Object[] pos = new Object[28];
  pos[1] = new HashSet<String>();

这是有效的,因为 HashSet是一个 Object

 Node[] pos = new Node[28];
 pos[1] = new HashSet<String>();

不起作用,因为A Node 不是 HashSet。您不能将 HashSet 放在需要节点的数组中。

于 2013-04-27T13:15:24.410 回答
0

在这里试试这个:

String[] stringArray = (String[])valid.toArray(new String[valid.size()]);
于 2013-04-27T13:15:54.793 回答
0

好吧,当你这样做的时候

Node[] pos = new Node[28];

这意味着您告诉编译器您正在创建长度为 28 的节点对象数组。但是当您在下面执行

  pos[1] = new HashSet<String>();

您正在尝试存储 HashSet 对象而不是您的节点对象。那是simplilation问题的问题。

但是使用 Object 数组,它可以作为 Object 是 java 中所有其他类的超类

于 2013-04-27T13:16:43.940 回答