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

如何避免Java中的大型if-else语句,java,xml,mapping,Java,Xml,Mapping,我正在用java开发一个框架,它依赖于大量带有大量参数的XML文件 当从XML文件读取参数时,我必须有一个大的if-else语句来决定参数是什么,然后调用适当的方法。 这正常吗?有一个大的if-else语句吗 我认为有一种简单而整洁的方法可以做到这一点,例如JavaXML映射或Java反射?这就是答案吗?如果是这样的话,你能举例说明如何做到这一点,这样我就不必依赖一个大的if-else语句了吗 谢谢 有JAXB(http://en.wikipedia.org/wiki/Java_Architec

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

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

我认为有一种简单而整洁的方法可以做到这一点,例如JavaXML映射或Java反射?这就是答案吗?如果是这样的话,你能举例说明如何做到这一点,这样我就不必依赖一个大的if-else语句了吗

谢谢

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

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

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


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

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

我建议使用map,它将参数作为键,xml条目作为值(不是整个xml)反射将是一种方法。可能与目标方法上的自定义注释相结合,以指示要传递给该方法的参数。不过,这是一项先进的技术


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

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

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

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

您可以改为使用策略设计模式,每个参数有一个策略对象,并使用从参数名称到要使用的策略对象的映射。我发现这种方法甚至对一个相当复杂的XML应用程序都很有用

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


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

我觉得您似乎想要一种数据驱动的基于规则的方法来编写应用程序,而不是像XSLT那样。实现这一点的一种方法是用XSLT而不是Java编写,毕竟XSLT是专门为处理XML而设计的,而Java不是。如果你做不到这一点,你可以研究XSLT是如何使用规则和动作来实现的,并在Java代码中模拟这种设计。

我觉得你似乎想要一种基于数据驱动的规则的方法来编写你的应用程序,而不是像你在XSLT中那样。实现这一点的一种方法是用XSLT而不是Java编写,毕竟XSLT是专门为处理XML而设计的,而Java不是。如果您不能做到这一点,您可以研究XSLT如何使用规则和操作来实现它,并在Java代码中模拟这种设计。

N具有M个参数的函数始终可以使用具有M+1个参数的单个函数来实现

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

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


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

N具有M个参数的函数始终可以使用具有M+1个参数的单个函数来实现

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

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


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

您要首先创建一个接口:

public interface XMLParameterHandler {
  public handle_parameter (String XMLData);
}
接下来,要创建地图:

private Map<string, XMLParameterHandler> handlers;
您需要在多个类上实现接口,每个类对应一个要处理的参数。这是对内部类的一个很好的使用。将每个已实现的Handerl插入地图:

handlers.put ("Param1", new XMLParam1HandlerImpl());
handlers.put ("Param2", new XMLParam2HandlerImpl());
然后可以从xml处理循环调用处理程序:

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

您要首先创建一个接口:

public interface XMLParameterHandler {
  public handle_parameter (String XMLData);
}
接下来,要创建地图:

private Map<string, XMLParameterHandler> handlers;
您需要在多个类上实现接口,每个类对应一个要处理的参数。这是对内部类的一个很好的使用。将每个已实现的句柄插入到