我认为我得到了未经检查的演员表的含义(从一个类型转换到另一种类型),但是“检查”演员表意味着什么?如何检查演员表,以便可以避免在Eclipse中出现此警告?
未检查的强制转换意味着(隐式或显式)您正在从泛型类型转换为非限定类型,或者反之。例如这条线
Set<String> set = new HashSet();
会产生这样的警告。
通常有这样的警告是有充分的理由的,因此您应该尝试改进代码而不是禁止警告。引用来自有效Java,第二版:
消除所有可能的未经检查的警告。
如果消除所有警告,可以确保代码是类型安全的,这是一件非常好的事情。这意味着您不会ClassCastException
在运行时获得“ a”
,并且可以提高您对程序按预期运行的信心。如果您不能消除警告,并且可以证明引发警告的代码是类型安全的,则(并且仅在此之后)使用
@SuppressWarnings("unchecked")
批注抑制警告。如果您在没有先证明代码是类型安全的情况下取消警告,那只会给自己一种错误的安全感。该代码可以在不发出任何警告的情况下进行编译,但是仍然可以ClassCastException
在运行时抛出。但是,如果您忽略了已知为安全的未经检查的警告(而不是禁止它们),那么当出现代表实际问题的新警告时,您将不会注意到。在您未静音的所有错误警报中,新警告将丢失。
当然,消除警告并不总是像上面的代码那样容易。但是,如果没有看到您的代码,就无法告诉您如何使其变得安全。
问题内容: Eclipse给我以下形式的警告: 类型安全性:未经检查的从Object到HashMap的转换 这是从对我无法控制返回对象的API的调用中得出的: 如果可能的话,我想避免Eclipse警告,因为从理论上讲,它们至少表明潜在的代码问题。不过,我还没有找到消除这种情况的好方法。我可以将涉及到的一行单独提取到一个方法中,然后添加到该方法中,从而限制了我忽略警告的代码块的影响。还有更好的选择吗
问题内容: 在我的spring应用程序上下文文件中,我有类似以下内容: 在java类中,实现如下所示: 在Eclipse中,我看到一条警告: 类型安全性:未经检查的从Object到HashMap的转换 我做错什么了?我该如何解决该问题? 问题答案: 好吧,首先,你正在通过新的HashMap创建调用浪费内存。你的第二行完全忽略了对此创建的哈希图的引用,从而使该哈希图可用于垃圾收集器。因此,不要这样做
问题内容: 我有一个不是actor的java对象,它使用actorSelection(Path)从一个actor系统中选择actor。系统中可能不存在所选参与者。 在Java Api中,ActorSelection不存在ask(),因此我无法向actor选择发送和标识消息并使用响应的发送者。 我试图通过演员选择将消息发送给演员,然后对死信做出反应来解决该问题。但是我没有任何死信。 如何通过Acto
我不明白为什么我收到以下代码的警告: 未选中对<code>isAssignableFrom(类)的调用 当我使用< code>isInstance方法时(根据我的理解,它提供相同的结果),我没有得到警告:
使用,这很容易:
问题内容: 通常,如果有任何类extends ,它将成为检查异常。还扩展了Exception。那么它是如何? 难道他们在这种特殊情况下会在 编译器中 自定义检查? 编辑: 我对已 检查的v / s未检查的异常 以及它们的优缺点等有适当的了解。我不接受它们之间的区别。 问题答案: 在规范的第11.1.1节中有明确规定: 及其所有子类共同是 运行时异常类 。 在 未经检查的异常类 是运行时异常类和错误