今天我写的函数有两个必需参数和三个可选参数。由于使用Optional<>
类型作为参数不受欢迎,因此函数重载是我处理此问题的工具。所以我最终得到这样的东西:
public boolean func(int a, String b)
public boolean func(int a, String b, String c)
public boolean func(int a, String b, int d)
public boolean func(int a, String b, long e)
然后我必须做两个参数的各种组合......
public boolean func(int a, String b, String c, int d)
public boolean func(int a, String b, String c, long e)
public boolean func(int a, String b, int d, long e)
最后是&#34;完整功能&#34;
public boolean func(int a, String b, String c, int d, long e)
这似乎对我来说太多了,当发生这种情况时,我觉得我做错了。在这种情况下,为什么我要创建7个附加功能而不是使用Optional
或POJO?处理此问题的最有效方法是什么?
答案 0 :(得分:1)
您绝对不必实现可选参数的所有组合。
在做出决定时要记住的关键观点是对调用者有多么有用。如果您没有用例来支持和公开重载方法,那么创建这些重载方法只会增加不必要的代码,从而产生不必要的测试和维护负担。
如果您正在寻找一种更简单的方式来展示相同的灵活性,那么您可以使用Optional
:
public boolean func(int a, String b,
Optional<String> c, Optional<Integer> d, Optional<Long> e)
这可能是一个很好的折衷方案,允许您的合同在功能上等同于具有许多重载方法的初始API。它允许您的客户选择他们发送的内容,并允许您使API混乱。最重要的是,它显示了什么是可选的,无需调用者阅读每种方法的文档。