当前位置: 首页 > 知识库问答 >
问题:

Guava可选作为可选参数的方法参数

颛孙铭
2023-03-14

最近,我和我的队友讨论了在方法中使用guavaoptional作为可选参数。

假设方法是

List<Book> getBooks(String catalogId, Optional<String> categoryId) {
     Validate.notNull(catalogId);
     Validate.notNull(categoryId); // Point of conflict. Is this required?

我的观点是,对于可选参数,optional只会使方法的契约更加清晰。只要看一下方法签名就可以知道这个参数是可选的,不需要读取JavaDocs。但当他不想使用该可选参数时,不应强制他传递optional.instant()

我的队友有不同的看法。他希望对其进行空检查,从而强制调用方始终传递optional. accents() 。他的观点是为什么我们要通过一个空的可选选项。此外,getBooks(“catalog123”,optional.缺席())看起来比getBooks(“catalog123”,null)更易读。

这个方法在我们的一个库包中,被我们拥有的多个包使用。

共有1个答案

谷梁向荣
2023-03-14

对于这种情况下的可选用法,您有什么建议?

避开。避开。避开。

虽然optionalnull的一个很酷的替代方案,但在Java中,您最终总是发现它是一个糟糕的添加。正如Seelenvirtuose所写的,有三种可能,而您只需要两种。正如JB Nizet所写的,它最好用作返回值,在这里它提醒调用方需要的检查。作为一个方法参数,它没有任何帮助。

getBooks(String catalogId, String categoryId = null)
getBooks(String catalogId, String categoryId)
getBooks(String catalogId)

重要的是一致性。跨类的一致性掌握在您的手中。与JDK的一致性意味着使用null,至少在可预见的将来(有一天JDK 8optional可能会占上风)。

 类似资料:
  • 问题内容: 最近,我与队友讨论了 在方法中使用可选参数的问题。 假设方法是 接受一个和 可选参数 ,它返回该目录中列出的书籍,如果还传递了类别,则仅返回该类别中的书籍。 冲突点是,验证是否为空检查。我认为不应对此进行空检查,因为它是可选参数。函数的调用者可以通过或,并且函数应在实现中处理两种情况。 我的意见是,对于可选参数,只会使方法的约定更加明确。只需查看方法签名即可知道此参数是可选的,不需要读

  • 我读了一篇关于使用选项作为方法参数的文章,大家一致认为永远不要使用选项作为方法参数。 Guava可选作为可选参数的方法参数 这种使用作为方法参数的情况合法吗?如果不是,我如何使这是可列举的?

  • 用户在这个插件的很多方面都可以进行定制,用户通过插件选项来达到这个目的(这些选项会在插件初始化的时候起效)。这些选项包括: 选项 描述 aspectRatio 长宽比,以后在选择时候就会维持不变。例如:"4:3" autoHide 如果设为true,那么在选择完后区域会消失。Default:false classPrefix 预先给插件元素的前缀 Default:imgareaselect dis

  • 英文原文:http://www.phpconcept.net/pclzip/user-guide/5 可选参数(普通参数) PCLZIP_OPT_PATH PCLZIP_OPT_ADD_PATH PCLZIP_OPT_REMOVE_PATH PCLZIP_OPT_REMOVE_ALL_PATH PCLZIP_OPT_SET_CHMOD PCLZIP_OPT_BY_NAME PCLZIP_OPT_B

  • You can customize Simditor by passing optional options when initializing Simditor. Here are some optional options and their default values: editor = new Simditor textarea: null placeholder: ''

  • 本文向大家介绍PowerShell函数参数设置为即可选又必选的方法,包括了PowerShell函数参数设置为即可选又必选的方法的使用技巧和注意事项,需要的朋友参考一下 本文介绍PowerShell自定义函数中使用参数集时,可以将同一个参数既设置为可选,又设置为必选。 好吧,小编承认,这个话题有点无聊,但确实还是有点有趣,不妨看一看啦。 在PowerShell中,我们有可能有这样的需求,如果只需要输