【发布时间】:2016-12-21 07:08:49
【问题描述】:
我有以下方法,其中要传递给方法的参数根据作为第一个参数传递的 ENUM 的值而变化。
public void startReporter(ReportType reportType, long period, Class className) {
reportHandler = new ReportHandler(metricRegistry);
switch (reportType) {
case CONSOLE_REPORTER:
reportHandler.startConsoleReport(period);
break;
case SLF4J_REPORTER:
reportHandler.startSLF4JReport(className,period);
break;
case JMX_REPORTER:
reportHandler.startJMXReport();
}
}
如您所见,并非所有传递的参数都在 switch 语句中的所有情况下使用。解决这种情况的最佳方法是什么?我不想有 3 种方法。我只需要用这种方法来做到这一点。如果方法的调用者可以通过查看签名来了解这一点,那就太好了。
【问题讨论】:
-
创建重载,在调用 main 方法时为可选参数传递
null。 -
创建重载等于有 3 种不同的方法来调用记者,而不需要枚举,不是吗?
-
没有。您的逻辑仍将封装在单个方法中(就像现在一样),重载将只是参数组合的包装器。
-
当有人使用 reportType = JMX_REPORTER 调用“startReporter”时,方法调用会是什么样子。是 startReporter(ReportType.JMX_REPORTER, null, null) 吗??
-
有些东西闻起来不太对劲。
reportHandler在您调用start....()方法后立即超出范围。ReportHandler对象真的是短暂的并且不需要吗?或者,它有一些静态副作用吗?
标签: java oop design-patterns methods signature