我不想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
的字段,但是我想禁用对私有方法的检查。 @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
,因为它很快会令人讨厌。我可以在接受某些外部DTO的各种类中使用多种方法。Optional
参数只是将其包装在方法中。尤其是由于在某些情况下我已经只有一个Optional
,因此我必须将其拆开,然后用类似myMethod(data.orElse(null))
的东西将其包装起来,然后在该方法中执行Optiona.ofNullable(parameter)
。总而言之,始终将其视为问题似乎是不合理的限制,即使它不会跨系统或跨层等传输数据。
因此,我是否可以仅从私有方法的设置中禁用该功能,而没有别的选择?
答案 0 :(得分:1)
当前,没有选项可以禁用对私有方法的检查。请关注/评论在YouTrack为您的功能请求创建的问题: https://youtrack.jetbrains.com/issue/IDEA-207468 谢谢