错误:通用数组创建

我不明白通用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作为重复链接的问题的回答中深入解释了这是如何工作的。