Java初学者在这里。这是代码:
private ArrayList<Rectangle> rectangles;
try {
InputStream IS = MyClass.class.getResourceAsStream("file.dat");
ObjectInputStream input = new ObjectInputStream(IS);
rectangles = (ArrayList<Rectangle>) input.readObject();
} catch (IOException | ClassNotFoundException ex) {
System.out.println(ex);
}
Netbeans告诉我,这是未经检查的演员表。 Google告诉我,我应该尽量避免这种警告,而不是抑制它,那么我将如何去做呢?实际上,该程序应读取的唯一文件确实包含ArrayList,如果没有,我可以捕获这些异常就可以了。
此外,如果我对char [] []进行相同操作(从OIS和OIS读取并尝试进行转换),则netbeans不会有任何问题。这是为什么?我认为这仍然是未经检查的演员。
最佳答案
只有知道警告的原因后,才应禁止显示警告。在这种情况下,由于听起来您已了解问题并正在采取措施来解决此问题,因此抑制它可能是可以的。但是,如果您不愿发出警告,那么在这种情况下,我发现这样做的唯一方法是执行以下操作:
public class ListOfRectangles extends ArrayList<Rectangle> {}
然后,使用
ListOfRectangles
作为数据类型以进行文件之间的序列化。编译器可以使用
char [] []
而不使用ArrayList<Rectangle>
的原因是因为Java泛型的概念称为擦除。这意味着对于通用类型(如ArrayList
),参数化类型(在这种情况下为Rectangle
)实际上不在字节码中。它仅在编译时存在,以便编译器可以仔细检查您的工作。数组不是这种情况。对泛型here有更深入的了解