Java-与基本数据类型的动态比较

Java-与基本数据类型的动态比较,java,dynamic,operators,conditional-statements,primitive,Java,Dynamic,Operators,Conditional Statements,Primitive,朋友们 我们正在编写一个验证框架 我们有一个如下所示的配置文件 <root> <property name="Premium"> <xmlTag>//Message/Request/Product/Benefit/Premium/amount</xmlTag> <valueType>float</valueType> <validation condition=">" value="0"&

朋友们

我们正在编写一个验证框架

我们有一个如下所示的配置文件

<root>
<property name="Premium">
    <xmlTag>//Message/Request/Product/Benefit/Premium/amount</xmlTag>
    <valueType>float</valueType>
    <validation condition=">" value="0">Premium Amount cannot be less than Zero.</validation>
</property>
给我的回答是真/假


谢谢&祝你好运…

你可以使用switch语句

char operator = ...;
switch(operator) {
   case '<': return value1 < value2;
   case '=': return value1 == value2;
}
char运算符=。。。;
开关(操作员){

case'将原语值包装到相应的包装中:

Float f = new Float(floatValue)
然后可以多态地使用提供的
compareTo()
方法

编辑:
您还可以查看用于表达式解析的全功能实现;除了这里已经提到的其他实现之外,我还要补充。

我建议使用表达式语言,例如Java EL,或者更好的Apache Commons Jexl,因为它更易于集成。下面是一个代码示例摘自:

在您的特定示例中,您可以将验证XML更改为以下内容:

<property name="Premium">
    <xmlTag>//Message/Request/Product/Benefit/Premium/amount</xmlTag>
    <valueType>float</valueType>
    <validation expression="Premium> 0">Premium Amount cannot be less than Zero.</validation>
</property>

//信息/请求/产品/利益/溢价/金额
浮动
保费金额不能小于零。
然后建立您自己的JEXL上下文:

JexlContext context = new MapContext();
context.set("PREMIUM", <Premium value fetched from XML>);
JexlContext context=newmapcontext();
上下文。设置(“高级”);

在我看来,这是最具可扩展性的解决方案,因为它允许您仅在一行代码中构建复杂的验证表达式。

您不必使用
如果然后使用其他
链,您可以使用哈希映射。但动态执行此操作没有捷径,因此您需要进行大量的编码。您是否还需要“看看这个问题:还有这个:是的,我想介绍所有可能的比较,比如=、=、!=…等等。感谢Angelo提出了很好的框架…
System.out.println(new bsh.explorer().eval(“1<0”);System.out.println(new bsh.explorer().eval(“1>0”);System.out.println(new bsh.explorer().eval”);System.out.println(新建bsh.解释器().eval(“1>=0”);System.out.println(新建bsh.解释器().eval(“0>=0”);System.out.println(新建bsh.解释器().eval(“1!=0”);System.out.println(新建bsh.解释器().eval(“0==0”);
bsh。解释器是否为OP提供了使用字符串的可能性“请注意,所有的=、=、!=运算符都可以用
compareTo()
为<0、==0或>=”的结果表来表示(例如,我没有意识到这是如何解决每个运算符的IF-ELSE-ELSEIF跳数过多的ops问题的。对不起,我想我误解了你的问题。你读了字符串吗?”“您在上一个
案例中错误地引入了一个赋值;请改用
=
<property name="Premium">
    <xmlTag>//Message/Request/Product/Benefit/Premium/amount</xmlTag>
    <valueType>float</valueType>
    <validation expression="Premium> 0">Premium Amount cannot be less than Zero.</validation>
</property>
JexlContext context = new MapContext();
context.set("PREMIUM", <Premium value fetched from XML>);