当前位置: 首页 > 知识库问答 >
问题:

未检查的石膏-我应该抑制它吗?

姚子石
2023-03-14

这里是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);
}

Netbean告诉我这是一个未经检查的强制转换。谷歌告诉我,我应该尽量避免这个警告,而不是压制它,那么我该如何去做呢?这个程序应该读取的唯一文件确实包含一个ArrayList,如果没有,我可以只捕获这些异常。

此外,如果我对char[][](从和OIS中读取并尝试转换)执行相同的操作,netbeans不会有任何问题。为什么会这样?我认为这仍然是一个未经检查的演员阵容。

共有3个答案

丁阎宝
2023-03-14

始终尝试避免此警告,而不是抑制它,这样可以降低运行时出错的可能性。

鞠隐水
2023-03-14

有时根本不可能或太难避免强制转换。无论如何,通过总是分配检查类型来尝试避免它们。但是如果你不能,那就抑制它。恕我直言。

在这种情况下,压制它看起来完全合法。这比返回Object要好。

上官鸿朗
2023-03-14

只有当您知道警告存在的原因时,您才应该取消警告。在这种情况下,既然听起来您了解问题并正在采取措施处理它,那么取消它可能是可以的。但是,如果您一心想让警告消失,在这种情况下,我找到的唯一方法是这样做:

public class ListOfRectangles extends ArrayList<Rectangle> {}

然后使用ListOfRecTangles作为您的数据类型,以序列化进出文件。

编译器可以使用char[]而不是ArrayList的原因

这里对泛型有更深入的了解

 类似资料:
  • 问题内容: 也许作为我使用强类型语言(Java)的日子的残余,我经常发现自己正在编写函数,然后强制进行类型检查。例如: 我应该继续这样做吗?这样做/不这样做有什么好处? 问题答案: 别那样做。 使用“动态”语言(强类型化为值*,无类型化为变量,以及后期绑定)的要点是,您的函数可以是适当多态的,因为它们可以处理任何支持您接口的对象功能依赖于(“鸭式打字”)。 Python定义了许多通用协议(例如,可

  • 在git push heroku master上,我遇到了以下错误: 在以下位置找不到抑制文件:etc/config/checkstyle suppressions。xml:找不到资源的etc/config/checkstyle抑制。xml”。 我发现了一个示例checkstyle抑制。xml文件,只是为了入门,在这里,并将其添加到my_app/target/test classes/org/gl

  • 我在Java8中遇到了一个问题,在使用cast时,它不允许我收集对象。 我得到了编译器错误: 错误:(71,23)java:不兼容类型:推理变量T的边界不兼容等式约束:java。util。列出下限:java。lang.反对 任何帮助都将不胜感激。 更新:

  • 问题内容: 我认为我得到了未经检查的演员表的含义(从一个类型转换到另一种类型),但是“检查”演员表意味着什么?如何检查演员表,以便可以避免在Eclipse中出现此警告? 问题答案: 未检查的强制转换意味着(隐式或显式)您正在从泛型类型转换为非限定类型,或者反之。例如这条线 会产生这样的警告。 通常有这样的警告是有充分的理由的,因此您应该尝试改进代码而不是禁止警告。引用来自有效Java,第二版: 消

  • 也许这个问题已经被问过了,但我真的不知道如何搜索它: 我有postgres表“customers”,每个客户都有自己的唯一名称。为了实现这一点,我在这个列中添加了一个惟一的约束。 我使用php访问该表。 当用户现在尝试创建一个新客户时,数据库会显示“完整性约束冲突”,php会抛出一个错误。 我想做的是在html输入字段中显示一个错误:“客户名称已被采用”。 我的问题是我应该怎么做。 我应该捕获PD

  • 使用,这很容易: