【问题标题】:Will any ide warn me when I set "Optional<String> optional = null;"当我设置“Optional<String> optional = null;”时,任何 ide 都会警告我吗?
【发布时间】:2015-06-20 03:18:24
【问题描述】:

如果我写这样的东西

java.util.Optional<String> optional = null;

或者作为一个字段(没有初始化值,也不在构造函数中)

private Optional<String> optional;

或稍后在代码中

optional = null;

我想我至少应该得到一个警告。我们发现了一些意外的 NullpointerExceptions,这些异常很晚才被发现,因为没有人预料到可能会有 Optional 的空实例(这显然是一个错误)。

我尝试了 Eclipse 和 IntelliJ,但都没有提及。我也没有找到插件。没有这样的检查是有原因的吗?还是在某处实施?

【问题讨论】:

  • 没有这样的检查。这使得可选的另一个候选者检查它们是否为空......
  • 每个最新的 IDE 都应该支持 @Nullable@NonNull@NonNullByDefault 注释……例如,对于 Eclipse,请参阅 help.eclipse.org/juno/topic/org.eclipse.jdt.doc.user/tasks/…
  • 所有解决方案通常都是为了避免 NPE。启用这些检查会在我们的项目中导致数百个警告。带有注释的注释并非无趣,但我不想在我的项目中使用特定于 Eclipse 的注释,然后我仍然需要确保注释放置正确。
  • @Marcel:您不需要特定于 Eclipse 的注释。您可以在项目中使用您想要的任何包和名称声明它们,然后将 Eclipse 配置为使用 your 注释,但我建议保留相同的简单名称并仅调整包,以便每个开发人员都能认识这些commonly known annotations。当然必须将这些注释放在正确的位置,如果你不告诉他们,你会如何期望编译器知道哪些变量可以是null,哪些不是?

标签: java eclipse intellij-idea ide java-8


【解决方案1】:

在 Eclipse 中,您可以转到项目属性,然后转到 Java 编译器 --> 错误/警告,检查 Enable project specific settings 并在 Potential programming problems 下将 Potential null pointer access 的设置更改为 WarningError (随心所欲):

【讨论】:

    【解决方案2】:

    如果您想查看可能导致 Eclipse 中 NullPointer exception 的语句的警告,请使用 findbug plugin for eclipse

    来自FindBugs Bug Descriptions

    NP:可能的空指针取消引用 (NP_NULL_ON_SOME_PATH)
    有一个语句分支,如果执行,则保证将取消引用空值,这将在执行代码时生成 NullPointerException。当然,问题可能是分支或语句不可行,空指针异常永远无法执行;确定这超出了 FindBugs 的能力。

    【讨论】:

      【解决方案3】:
      public final class Optional<T> {
      ....
      }
      

      由于Optional 是一个继承自Object 的类(就像Java 中的每个类一样),它可以设置为null。这里没有错。

      但是当您想将其设置为空值时,您应该始终意识到将其设置为Optional.empty()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-25
        • 1970-01-01
        • 2013-01-01
        • 2014-10-01
        • 2019-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多