首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(Java)重载:多少才是太多?

(Java)重载:多少才是太多?
EN

Stack Overflow用户
提问于 2013-10-29 03:31:11
回答 4查看 596关注 0票数 2

我正在使用Java生成JCL。我有四种添加数据定义语句的方法。一个接受字符,一个接受字符串,一个接受数组(字符串),另一个没有第二个参数。

代码语言:javascript
复制
public void addDD (String label, char classChar) //Generates: SYSIN DD SYSOUT=[classChar]
public void addDD (String label, String dataset) //Generates: SYSIN DD DSN=[dataset]
public void addDD (String label) //Generates: SYSIN DD DUMMY
public void addDD (String label, String datasets[]) //Generates: SYSIN DD *
                                                    // DSN=[datasets[0]],
                                                    // DSN=[datasets[1]]

我担心的是,这些方法不仅仅接受不同的参数类型;整个方法都会根据类型的不同而变化。如果是字符串,则需要"DSN=“。如果是字符,则需要"SYSOUT=“。同时,我不希望客户端担心在每个场景中使用不同的方法名称。

我当前的设计是被认为是糟糕的实践还是良好的实践?

EN

回答 4

Stack Overflow用户

发布于 2013-10-29 03:39:48

这些决定在一定程度上总是与品味有关。

在这种情况下,我宁愿更改方法名称,因为它们确实做了一些不同的事情。大多数时候,像这样的重载方法只是为了方便:使用char或String变量主要意味着char将被转换为字符串,并且效果将是相同的,这与您的示例中的情况不同。

这样做可能还有其他原因(使用反射来找到正确的方法),但在这种情况下,我建议编写清晰的Javadoc来描述这些方法实际所做的事情,以避免混淆。

票数 0
EN

Stack Overflow用户

发布于 2013-10-29 03:49:06

您所做的是非常危险的--您指望addDD(String, char)的调用者读取addDD(String, String),然后发现他不应该使用javadoc。

选项1:重命名方法:addDDSysout()addDDDsn()等。

Option2:只需使用一个方法即可实现所有这些功能:

代码语言:javascript
复制
addDD(String label, String... args)

并且确保你可以处理任何抛给它的东西--参数中没有字符串,单个字符串,多个字符串,单个字符等等。

票数 0
EN

Stack Overflow用户

发布于 2013-10-29 04:53:47

我不得不承认,这些事情往往是品味的问题。但我不确定其他响应者是否理解JCL DD语句的意义。因为根据你的问题领域我不同意他们的观点。

我喜欢你的设计。我不鼓励使用不同的方法名。这基本上就是TSO对FILE(xxx)和DSN(xxx)所做的事情,我一直很讨厌它。虽然您的方法在输入读取器流中产生不同的“结果”,但这些差异是由JCL的语法强制的。更具体地说,他们不做不同的事情。从根本上说,您是在向批处理作业声明数据源/接收器。不要让你的用户学习4种不同的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19643489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档