错误:通用数组创建
我不明白通用arrays创建的错误。
首先,我尝试了以下内容:
public PCB[] getAll() { PCB[] res = new PCB[list.size()]; for (int i = 0; i < res.length; i++) { res[i] = list.get(i); } list.clear(); return res; }
然后我尝试这样做:
PCB[] res = new PCB[100];
我必须错过一些似乎正确的事情。 我试着把它抬起来,我真的做到了。 没有任何东西在点击。
我的问题是:我该怎么做才能解决这个问题?
错误是:
.\Queue.java:26: generic array creation PCB[] res = new PCB[200]; ^ Note: U:\Senior Year\CS451- file uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 1 error
工具已完成,退出代码为1
您无法使用通用组件类型创建数组。
创建一个显式类型的数组,比如Object[]
。 如果需要,可以将其转换为PCB[]
,但在大多数情况下我不建议使用它。
PCB[] res = (PCB[]) new Object[list.size()]; /* Not type-safe. */
如果您想要类型安全,请使用类似java.util.List
的集合而不是数组。
顺便说一下,如果list
已经是java.util.List
,你应该使用它的一个toArray()
方法,而不是在你的代码中复制它们。 但这并不能解决类型安全问题。
除了“可能的重复”中提出的方法之外,解决这个问题的另一个主要方法是由调用者提供数组本身(或至少一个模板),调用者希望知道具体类型并且可以从而安全地创建数组。
这就是实现像ArrayList.toArray(T[])
这样的方法。 我建议你看看这种灵感方法。 更好的是,你可能应该使用那种方法,正如其他人所指出的那样。
以下将为您提供所需类型的数组,同时保留类型安全性。
PCB[] getAll(Class arrayType) { PCB[] res = arrayType.cast(java.lang.reflect.Array.newInstance(arrayType.getComponentType(), list.size())); for (int i = 0; i < res.length; i++) { res[i] = list.get(i); } list.clear(); return res; }
在我对Kirk Woll作为重复链接的问题的回答中深入解释了这是如何工作的。