是否可以在IntelliJ中为私有方法禁用“可选用作字段或参数类型”检查?

时间:2019-02-18 09:03:50

标签: java intellij-idea intellij-inspections

我不想disable the warning altogether,我已经知道why you supposedly shouldn't use Optional as a parameter。但是,我认为这与我的情况无关。

出于说明目的,我有如下代码:

//IntelliJ reports: 'Optional<ForeignDataTransferObject>' used as type for parameter 'data'
private LocalSystemPerson extractPerson(Optional<ForeignDataTransferObject> data) {
    return data
            .map(data -> data.getPeopleListWrapper())
            .map(peopleListWrapper -> peopleListWrapper.getList())
            .map(listOfForeignPeople -> listOfForeignPeople.stream())
            .orElseGet(Stream::empty)
            .findFirst()
            .map(foreignPerson -> convertToLocalSystemPerson(foreignPerson))
            .orElse(someFallbackValue);
}

先获取人员列表,然后获取第一个项目,然后进行转换。由于我正在调用外部API并获得具有一堆字段的数据传输对象,这些字段中的任何字段都可以为null,因此任何集合都包装在一个额外的类中,即使这样,获得空列表也是有效的情况。因此,我最终得到了像这样的冗长代码以转换单个值。我把它压缩成一个单独的辅助方法,以避免所有冗长的词都放在一个地方。

但是IntelliJ抱怨我传递了一个Optional参数。我通常会同意这一点,但是如果我使用的是一种私有方法,可以避免另一种方法变得太长,那么我就不会认为这是一个问题-我可能需要从数据传输中获取一个以上的值宾语。

  • 我仍然希望避免创建接受Optional的公共方法或保存Optional的字段,但是我想禁用对私有方法的检查。
  • 我希望不必annotate each method with @SuppressWarnings("OptionalUsedAsFieldOrParameterType"),因为它很快会令人讨厌。我可以在接受某些外部DTO的各种类中使用多种方法。
  • 类似地,我也不想传递非Optional参数只是将其包装在方法中。尤其是由于在某些情况下我已经只有一个Optional,因此我必须将其拆开,然后用类似myMethod(data.orElse(null))的东西将其包装起来,然后在该方法中执行Optiona.ofNullable(parameter)

总而言之,始终将其视为问题似乎是不合理的限制,即使它不会跨系统或跨层等传输数据。

因此,我是否可以仅从私有方法的设置中禁用该功能,而没有别的选择?

1 个答案:

答案 0 :(得分:1)

当前,没有选项可以禁用对私有方法的检查。请关注/评论在YouTrack为您的功能请求创建的问题: https://youtrack.jetbrains.com/issue/IDEA-207468 谢谢