是否可以将 null/空未使用的参数传递给方法?[已结束]

Is it okay to pass null/empty unused parameters to a method? [closed]

提问人:Ahmad Nasser 提问时间:1/6/2022 最后编辑:TylerHAhmad Nasser 更新时间:1/12/2022 访问量:1220

问:


想改进这个问题吗?更新问题,以便可以通过编辑这篇文章来用事实和引文来回答。

去年关闭。

我试图找到在类似情况下要做的最佳实践,比如说我有一种方法

String getContent(String id, Boolean remove_tags) {
    …
}

这有一个很长的实现,我需要这个功能,但在某些情况下我不想发送第二个参数,在这种情况下,正确的做法是将其作为 null 传递或创建另一个只有第一个参数的方法,并使该方法以这种方式返回这个:

String getContent(String id) {
     return getContent(id, null);
}

我在这里读到这个问题中的建议,只将其作为 null 传递。

我可能什么都没做,但我试图对这样的主题进行一些研究,但找不到有用的东西,所以我需要一些意见!

java 函数 方法 参数传递

评论

1赞 Lei Yang 1/6/2022
你想解决什么问题?
2赞 Kayaman 1/6/2022
所以如果你通过,它会删除标签吗?不是很干净的设计。首先应该像瘟疫一样避免三态布尔值,因此这比仅仅传递 .nullnull
0赞 Ahmad Nasser 1/6/2022
对不起,如果问题不够清楚,布尔值只是第二个参数的一个例子,但只是想象一个方法有几个参数,我可以通过只传递它的一些参数来获得我需要的功能,在这里将其他参数传递为 null/空或使用我只需要的参数创建另一个方法是正确的吗?@Kayaman
0赞 1/6/2022
如果在将 null 作为默认值传递或克隆和复制(可能很多)代码之间进行选择,我宁愿选择传递 null。话虽如此,就像编程中的所有事情一样,它应该适度地进行,如果在某个时候你最终接到了一个电话,你可能做得太过分了,应该重新考虑你的方法设计;)getContent(id, null, null, null, null, null, null);
1赞 TylerH 1/12/2022
@BasilBourque 需要转义的是 URL 的搜索字符串 URI 中的括号。

答:

4赞 Basil Bourque 1/6/2022 #1

无论哪种方式都是允许的。我已经看到两者都被使用,甚至在与 Java 捆绑在一起的库中也是如此。

首选重载

String getContent( String id , Boolean remove_tags ) { … }
String getContent( String id ) { … }

👉 使用单个参数添加第二个方法的好处是可以清楚地传达单个参数将成功

仅使用第一种方法时,调用程序员无法判断是否允许为第二个参数传递 null。她必须研究 Javadoc,甚至源代码,以确定 null 是否会成功。

自记录代码通常更可取。

顺便说一句,添加共享名称的方法的技术术语是重载