【发布时间】:2017-12-11 18:42:15
【问题描述】:
如何将这个 switch-case 块转换成好的代码?
private static void agentFieldContructor(Agent agent, String nodeName, String value) {
switch (nodeName) {
case "Description":
agent.setDescription(value);
break;
case "Model":
agent.setModel(value);
break;
(... +18)
}
}
agent 是一个对象,我根据指定的nodeName 用value 参数填充它。
每个 nodeName 都引用一个不同的代理属性,但我像字符串一样接收它,我无法更改它。我搜索了一些设计模式,但找不到任何可以帮助我的东西。
【问题讨论】:
-
是什么让您认为 switch...case 不是好代码?您必须使用您所拥有的,如果您将其作为字符串接收,则 switch...case 与任何方法一样有效。
-
您的开关不一定是坏的......但是,请查看 BeanUtils。 commons.apache.org/proper/commons-beanutils/apidocs/org/apache/…
-
我在面向对象语言中学到的是:如果你有一个巨大的 if-else 块或 switch-case,那么你就做错了。
-
明确一点:您正试图通过
value设置代理实例的属性? -
切换大小写本身不一定是坏代码。在这种特殊情况下,您应该在
Agent类中编写适当的构造函数,或者要求直接调用 setter 而不是通过此方法。
标签: java if-statement design-patterns switch-statement object-oriented-analysis