我声明了一个对象数组。是否可以使用我的自定义节点类而不是通用对象数组?这是我的代码:
Object[] pos = new Object[28];
pos[1] = new HashSet<String>();
我的节点类只包含字符串值。我尝试直接这样做,但它不起作用。
Node[] pos = new Node[28];
pos[1] = new HashSet<String>();
不,你不能做你所做的事情:当你声明一个 type 数组时Node
,只有 type 的对象Node
或通过继承从它派生的类型可以是数组元素。
这适用于Object[]
数组的原因是它Object
是每个 Java 对象的基类。HashSet<String>
对象可以转换为类型java.lang.Object
,但不能转换为不相关的类型Node
。
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 放在需要节点的数组中。
在这里试试这个:
String[] stringArray = (String[])valid.toArray(new String[valid.size()]);
好吧,当你这样做的时候
Node[] pos = new Node[28];
这意味着您告诉编译器您正在创建长度为 28 的节点对象数组。但是当您在下面执行
pos[1] = new HashSet<String>();
您正在尝试存储 HashSet 对象而不是您的节点对象。那是simplilation问题的问题。
但是使用 Object 数组,它可以作为 Object 是 java 中所有其他类的超类