2011-04-04 75 views
1

我正在开发一个依赖大量参数的XML文件的java框架。如何避免Java中的大if-else语句

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

我在想这样做有一个简单和整洁的方式,例如, Java XML映射或Java反射?这是答案吗?如果是这样,请你举例说明这是如何完成的,所以我不必依赖大的if-else语句?

谢谢!

+0

换句话说,我怎么能映射从我的XML文件的各种Java方法? – 2011-04-04 13:19:24

+1

你可以编辑你的答案,而不是评论它。 – 2011-04-04 13:21:02

+0

switch(parameter){case:...}? – Jaymz 2011-04-04 13:24:07

回答

2

有将JAXB映射到xml的JAXB(http://en.wikipedia.org/wiki/Java_Architecture_for_XML_Binding)。

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

1

我推荐使用地图,有参数的关键和XML条目值(不是整个XML)

+1

java 7还支持带字符串参数的switch case – 2011-04-04 13:27:11

0

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

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

0

一个大的if-else语句来决定什么样的参数,然后调用相应的方法

你也可以使用策略设计模式,每个参数的一个战略目标,并使用地图从要使用的策略对象的参数名称。我发现这种方法对于即使是复杂的XML应用程序也很有用。

0

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

0

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

如果您需要一个大的if then else语句来决定要分派哪个方法,那么您可以在您的方法中添加一个参数并调用单个方法。

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

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

3

您需要先创建一个接口:要创建地图

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

下一页:

private Map<string, XMLParameterHandler> handlers; 

...并与相关Map实现一个初始化:

this.handlers = new HashMap<>(); 

您需要实现一些类的接口,一个用于e你打算处理的参数。这是内部类的一个很好的用法。插入这些实施handerls进入地图:

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

然后就可以调用从XML处理循环的处理程序:

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