如何避免Java中的大型if-else语句

时间:2011-04-04 13:18:30

标签: java xml mapping

我正在使用java开发一个框架,它依赖于大量具有大量参数的XML文件。

当从XML文件中读取参数时,我必须有一个大的if-else语句来决定参数是什么,然后调用适当的方法。 这是正常的吗?有一个大的if-else语句?

我认为有一种简单而简洁的方法可以做到这一点,例如: Java XML映射还是Java思考?这是答案吗?如果是这样,你能不能提供一些如何完成的例子,这样我就不必依赖大量的if-else声明了?

谢谢!

7 个答案:

答案 0 :(得分:3)

您想先创建一个界面:

public interface XMLParameterHandler {
  public handle_parameter (String XMLData);
}

接下来,您要创建一个地图:

private Map<string, XMLParameterHandler> handlers;

...并使用相关的Map实现之一进行初始化:

this.handlers = new HashMap<>();

您需要在许多类上实现接口,每个类对应您要处理的每个参数。这是对内部类的很好用。将这些已实现的handerl中的每一个插入到地图中:

handlers.put ("Param1", new XMLParam1HandlerImpl());
handlers.put ("Param2", new XMLParam2HandlerImpl());

然后你可以从xml处理循环调用处理程序:

handlers.get (paramValue).handle_parameter(XmlData);

答案 1 :(得分:2)

JAXB(http://en.wikipedia.org/wiki/Java_Architecture_for_XML_Binding)用于将java类映射到xml。

但是你不能用它映射方法:你只能将属性映射到xml文件值(从xml反序列化参数)。

答案 2 :(得分:1)

我建议使用Map,它将参数作为键,将xml条目作为值(不是整个xml)

答案 3 :(得分:0)

反思将是一种方法。也许与目标方法上的自定义注释结合使用,以指示要传递给该方法的参数。不过,这是一种先进的技术。

更标准的技术是使用映射,其中键是属性名称,值是您定义的某个接口的实现的实例,如AttributeHandler。然后,实现包含每个属性的代码。这涉及编写很多小类,但你可以将它们作为匿名类来实现,以节省空间并保持代码内联。

答案 4 :(得分:0)

  

一个大的if-else语句来决定参数是什么,然后调用适当的方法

您可以使用策略设计模式,每个参数使用一个策略对象,并使用参数名称中的映射到要使用的策略对象。我发现这种方法对于中等复杂的XML应用程序很有用。

答案 5 :(得分:0)

听起来好像你想要一个基于数据驱动的基于规则的方法来编写你的应用程序,就像你进入XSLT一样。实现这一目标的一种方法是在XSLT而不是Java中编写它 - 毕竟,XSLT是专为处理XML而设计的,而Java则不是。如果你不能这样做,你可以研究XSLT如何使用规则和操作来完成它,并在Java代码中模拟这个设计。

答案 6 :(得分:0)

带有M个参数的N个函数总是可以使用带有M + 1个参数的单个函数来实现。

如果你需要一个大的if then else语句来决定调度哪个方法,那么你只需要在方法中添加一个参数并调用一个方法。

您不应该使用if-then-else语句来绑定参数值。

如果存在依赖于特定参数值的复杂逻辑,则可以使用表驱动方法。您可以将参数值的各种组合映射到等价类,然后将等价类组合变为具有唯一ID的表中的行,然后根据该唯一ID具有switch语句。