Netbeans 警告类型转换太强,但如果删除转换则会出错

Posted

技术标签:

【中文标题】Netbeans 警告类型转换太强,但如果删除转换则会出错【英文标题】:Netbeans warning about type cast too strong, but get error if remove cast 【发布时间】:2014-04-05 21:43:08 【问题描述】:

这里是sn-p的代码:

    ByteBuffer buf = ByteBuffer.allocate(deleteInfo.size);
    for(int j = 0; j < deleteInfo.size; j++)
      buf.put(j,(byte)'.');

这是上面最后一行的警告:

Unnecessary cast to byte

我同意,但是当我移除演员表时...

  buf.put(j, '.');

...这是错误:

incompatible types; possible lossy conversion from char to byte

我意识到char 在 Unicode 中是两个字节,所以这肯定是错误的原因。在charbyte 的这个演员阵容中,警告没有负面影响,因为我所有的数据都是ASCII。 (我尝试使用 '.' 的实际 ASCII 码;结果相同。)

所以我可以放心地忽略该错误,但我想“合法地”处理这个问题,而不仅仅是关闭或忽略警告机制。

页面上显示的提交问题的主题似乎都没有解决问题。 Google 出现了 getBytesSystem.getProperty("file.encoding") 返回“UTF-8”,而我没有说我想使用该编码,但我看不到如何将 getBytes("UTF-8")(或其他任何东西)应用到 buf

如何编写代码以避免出现警告?或者我应该把它写成一个 danged-if-I-do-danged-if-I-don't Netbeans 怪癖?

【问题讨论】:

【参考方案1】:

您不一定需要添加代码来消除警告。

打开 NetBeans 并导航到工具 -> 选项 -> 编辑器。转到“提示”选项卡,选择 java 并打开“标准 Javac 警告”下拉菜单并取消选中“不必要的强制转换”框。

如果您使用的是 Mac,则所有步骤都相同,除了转到 工具 -> 选项转到 NetBeans -> 首选项。

或者,您可以在要转换该内容的方法上方添加@SuppressWarnings("cast")

【讨论】:

对,但是,正如我所说,我不想忽略它。但是,考虑到唯一的其他答案包含一种让 Netbeans 停止抱怨的“可怕”方式,这可能就是我要做的——关闭警告。我想关闭警告是完全合理的,如果保持打开并遵循,会导致错误!这有点像反转“if”的“提示”。接受提示并获得相同的提示!哇!?那个关了;这个是正确的......现在。 改变了我的想法。留下提示,但会忽略。我不确定提示消息所说的含义:“报告类型转换过于严格,转换为更通用的类型对于实际表达式就足够了。有时,实例被转换为特定的子类型,但是从转换实例调用的方法或使用的字段实际上是由某个超类型定义的。在这种情况下,转换为过于特定的类型会引入不必要的代码耦合并限制其可扩展性。”提示仍然开启可能有朝一日会很好。 @DSlomer64 我只记得你可以做的其他事情,如果你只是想在代码的特定部分忽略该警告。查看新的编辑。 好主意。谢谢。至少通过这种方式,代码中的某些内容不一定是犹太教的,即使出于所有实际目的,演员表已经足够犹太教了。有时会跳很多圈...... @BitNinja——好点。我没有说我的意思。这是“解决方法”。 byte b = '.' ; buf.put(j,b); 【参考方案2】:

这既可怕又麻烦,但您可以通过以下方式避免演员:

".".getBytes()[0]

这实际上正是您想要的。 char 实际上是不同服装的 int,您需要 int 的低字节 - 这就是这样做的。

【讨论】:

是的,这太可怕了,因为这是一种让 Netbeans 停止抱怨的荒谬方式!不过谢谢。我永远不会想出这个聪明的点。我支持你有两个原因:到目前为止,它是唯一基于代码的答案(我学到了一些东西!)而且我读了你的“自我笔记”,发现你也一样,找到了那些突然开始的人—— - 用“所以......”很烦人!我很高兴我没有让我的帖子说“所以,这是代码 sn-p!”但我不可能!当然,我最终确实说“所以我可以放心地忽略......”,但没关系。我得出了一个结论。 (讲道结束。)

以上是关于Netbeans 警告类型转换太强,但如果删除转换则会出错的主要内容,如果未能解决你的问题,请参考以下文章

关于数据丢失的警告 c++/c

将 iOS 应用程序转换为 64 位架构得到错误和警告

某些 Java 泛型类型转换中的类型安全警告是啥意思?

如何避免类型转换警告?

关于不同类型字符的转换

警告:从枚举类型“UIInterfaceOrientation”到不同枚举类型“UIDeviceOrientation”的隐式转换?