Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MVEL未按预期进行空比较_Java_Comparison_Mvel_Isnullorempty - Fatal编程技术网

Java MVEL未按预期进行空比较

Java MVEL未按预期进行空比较,java,comparison,mvel,isnullorempty,Java,Comparison,Mvel,Isnullorempty,根据中的MVEL文件[ 如果下列条件为真,则应计算为真 字符串的长度大于0,但仅由空格组成 布尔值为false 数值为0 但它并没有给出预期的结果 当字符串长度>0但仅由空格组成时,For String case条件的计算结果为false(下面给出了使用的代码) stringValue=”“; Map contextMap=newhashmap(); put(“stringValue”,stringValue); System.out.println(MVEL.eval(“stringValue

根据中的MVEL文件[

如果下列条件为真,则应计算为真

字符串的长度大于0,但仅由空格组成

布尔值为false

数值为0

但它并没有给出预期的结果

  • 当字符串长度>0但仅由空格组成时,For String case条件的计算结果为false(下面给出了使用的代码)

    stringValue=”“;
    Map contextMap=newhashmap();
    put(“stringValue”,stringValue);
    System.out.println(MVEL.eval(“stringValue==empty”,contextMap));
    
  • 对于布尔值,无论布尔值如何,它都会求值为false(使用的代码如下所示)

    布尔布尔布尔值=false;
    Map contextMap=newhashmap();
    put(“booleanValue”,booleanValue);
    System.out.println(MVEL.eval(“booleanValue==empty”,contextMap));
    
  • 它显示了比较整数时的错误。 代码:

    Integer integerValue=0;
    Map contextMap=newhashmap();
    put(“integerValue”,integerValue);
    System.out.println(MVEL.eval(“integerValue==empty”,contextMap));
    
  • 错误:

    Exception in thread "main" [Error: failed to subEval expression]
    [Near : {... integerValue == empty ....}]
                                 ^
    [Line: 1, Column: 17]
        at org.mvel2.compiler.AbstractParser.reduce(AbstractParser.java:2653)
        at org.mvel2.compiler.AbstractParser.arithmeticFunctionReduction(AbstractParser.java:2552)
        at org.mvel2.MVELInterpretedRuntime.parseAndExecuteInterpreted(MVELInterpretedRuntime.java:152)
        at org.mvel2.MVELInterpretedRuntime.parse(MVELInterpretedRuntime.java:49)
        at org.mvel2.MVEL.eval(MVEL.java:165)
        at com.Test1.main(Test1.java:15)
    Caused by: java.lang.RuntimeException: cannot convert <> to a numeric type: class org.mvel2.compiler.BlankLiteral [200]
        at org.mvel2.math.MathProcessor.getNumber(MathProcessor.java:702)
        at org.mvel2.math.MathProcessor._doOperations(MathProcessor.java:214)
        at org.mvel2.math.MathProcessor.doOperations(MathProcessor.java:79)
        at org.mvel2.math.MathProcessor.doOperations(MathProcessor.java:48)
        at org.mvel2.util.ExecutionStack.op(ExecutionStack.java:178)
        at org.mvel2.compiler.AbstractParser.reduce(AbstractParser.java:2593)
        ... 5 more
    
    线程“main”中出现异常[错误:无法对表达式进行次求值] [近:{…integerValue==空….}] ^ [第1行第17列] 位于org.mvel2.compiler.AbstractParser.reduce(AbstractParser.java:2653) 位于org.mvel2.compiler.AbstractParser.arithmetricFunctionReduce(AbstractParser.java:2552) 在org.mvel2.MVELInterpretedRuntime.parseAndExecuteInterpreted(MVELInterpretedRuntime.java:152) 在org.mvel2.MVELInterpretedRuntime.parse(MVELInterpretedRuntime.java:49) 位于org.mvel2.MVEL.eval(MVEL.java:165) 位于com.Test1.main(Test1.java:15) 原因:java.lang.RuntimeException:无法转换为数字类型:class org.mvel2.compiler.BlankLiteral[200] 在org.mvel2.math.MathProcessor.getNumber(MathProcessor.java:702) 位于org.mvel2.math.MathProcessor.\u doOperations(MathProcessor.java:214) 在org.mvel2.math.MathProcessor.doOperations上(MathProcessor.java:79) 在org.mvel2.math.MathProcessor.doOperations上(MathProcessor.java:48) 位于org.mvel2.util.ExecutionStack.op(ExecutionStack.java:178) 位于org.mvel2.compiler.AbstractParser.reduce(AbstractParser.java:2593) …还有5个
    为什么它不能按照文档工作?

    这三个问题都与MVEL问题有关

    对于
    Q1和Q2

    对于
    empty
    运算符,MVEL有一个类
    BlankLiteral
    ,它有一个方法

    public boolean equals(Object obj) {
        if (obj == null || "".equals(valueOf(obj))) {
          return true;
        }
        else if (isNumeric(obj)) {
          return "0".equals(valueOf(obj));
        }
        else if (obj instanceof Collection) {
          return ((Collection) obj).size() == 0;
        }
        else if (obj.getClass().isArray()) {
          return getLength(obj) == 0;
        }
        return false;
      }
    
    不处理您在
    Q1和Q2中询问的案例

    Q3,表达式
    integerValue==空

    MVEl试图将
    empty
    强制转换为Number,控制权由此类
    MathProcessor.class

    方法是

    private static Double getNumber(Object in, int type) {
        if (in == null)
          return 0d;
        switch (type) {
          case BIG_DECIMAL:
            return ((Number) in).doubleValue();
          case DataTypes.BIG_INTEGER:
            return ((Number) in).doubleValue();
          case DataTypes.INTEGER:
          case DataTypes.W_INTEGER:
            return ((Number) in).doubleValue();
          case DataTypes.LONG:
          case DataTypes.W_LONG:
            return ((Number) in).doubleValue();
          case DataTypes.STRING:
            return Double.parseDouble((String) in);
          case DataTypes.FLOAT:
          case DataTypes.W_FLOAT:
            return ((Number) in).doubleValue();
          case DataTypes.DOUBLE:
          case DataTypes.W_DOUBLE:
            return (Double) in;
          case DataTypes.SHORT:
          case DataTypes.W_SHORT:
            return ((Number) in).doubleValue();
          case DataTypes.CHAR:
          case DataTypes.W_CHAR:
            return Double.parseDouble(String.valueOf((Character) in));
          case DataTypes.BOOLEAN:
          case DataTypes.W_BOOLEAN:
            return ((Boolean) in) ? 1d : 0d;
          case DataTypes.W_BYTE:
          case DataTypes.BYTE:
            return ((Byte) in).doubleValue();
        }
    
        throw new RuntimeException("cannot convert <" + in + "> to a numeric type: " + in.getClass() + " [" + type + "]");
    
    }
    
    200只不过是
    数据类型。EMPTY
    当前不由MVEL处理。因此,由于没有匹配的大小写,它会引发异常


    因此,仍然“空”在MVEL中没有完全实现,这三个问题都与MVEL问题有关

    对于
    Q1和Q2

    对于
    empty
    运算符,MVEL有一个类
    BlankLiteral
    ,它有一个方法

    public boolean equals(Object obj) {
        if (obj == null || "".equals(valueOf(obj))) {
          return true;
        }
        else if (isNumeric(obj)) {
          return "0".equals(valueOf(obj));
        }
        else if (obj instanceof Collection) {
          return ((Collection) obj).size() == 0;
        }
        else if (obj.getClass().isArray()) {
          return getLength(obj) == 0;
        }
        return false;
      }
    
    不处理您在
    Q1和Q2中询问的案例

    Q3,表达式
    integerValue==空

    MVEl试图将
    empty
    强制转换为Number,控制权由此类
    MathProcessor.class

    方法是

    private static Double getNumber(Object in, int type) {
        if (in == null)
          return 0d;
        switch (type) {
          case BIG_DECIMAL:
            return ((Number) in).doubleValue();
          case DataTypes.BIG_INTEGER:
            return ((Number) in).doubleValue();
          case DataTypes.INTEGER:
          case DataTypes.W_INTEGER:
            return ((Number) in).doubleValue();
          case DataTypes.LONG:
          case DataTypes.W_LONG:
            return ((Number) in).doubleValue();
          case DataTypes.STRING:
            return Double.parseDouble((String) in);
          case DataTypes.FLOAT:
          case DataTypes.W_FLOAT:
            return ((Number) in).doubleValue();
          case DataTypes.DOUBLE:
          case DataTypes.W_DOUBLE:
            return (Double) in;
          case DataTypes.SHORT:
          case DataTypes.W_SHORT:
            return ((Number) in).doubleValue();
          case DataTypes.CHAR:
          case DataTypes.W_CHAR:
            return Double.parseDouble(String.valueOf((Character) in));
          case DataTypes.BOOLEAN:
          case DataTypes.W_BOOLEAN:
            return ((Boolean) in) ? 1d : 0d;
          case DataTypes.W_BYTE:
          case DataTypes.BYTE:
            return ((Byte) in).doubleValue();
        }
    
        throw new RuntimeException("cannot convert <" + in + "> to a numeric type: " + in.getClass() + " [" + type + "]");
    
    }
    
    200只不过是
    数据类型。EMPTY
    当前不由MVEL处理。因此,由于没有匹配的大小写,它会引发异常


    因此,仍然“空”在MVEL中没有完全实现,这三个问题都与MVEL问题有关

    对于
    Q1和Q2

    对于
    empty
    运算符,MVEL有一个类
    BlankLiteral
    ,它有一个方法

    public boolean equals(Object obj) {
        if (obj == null || "".equals(valueOf(obj))) {
          return true;
        }
        else if (isNumeric(obj)) {
          return "0".equals(valueOf(obj));
        }
        else if (obj instanceof Collection) {
          return ((Collection) obj).size() == 0;
        }
        else if (obj.getClass().isArray()) {
          return getLength(obj) == 0;
        }
        return false;
      }
    
    不处理您在
    Q1和Q2中询问的案例

    Q3,表达式
    integerValue==空

    MVEl试图将
    empty
    强制转换为Number,控制权由此类
    MathProcessor.class

    方法是

    private static Double getNumber(Object in, int type) {
        if (in == null)
          return 0d;
        switch (type) {
          case BIG_DECIMAL:
            return ((Number) in).doubleValue();
          case DataTypes.BIG_INTEGER:
            return ((Number) in).doubleValue();
          case DataTypes.INTEGER:
          case DataTypes.W_INTEGER:
            return ((Number) in).doubleValue();
          case DataTypes.LONG:
          case DataTypes.W_LONG:
            return ((Number) in).doubleValue();
          case DataTypes.STRING:
            return Double.parseDouble((String) in);
          case DataTypes.FLOAT:
          case DataTypes.W_FLOAT:
            return ((Number) in).doubleValue();
          case DataTypes.DOUBLE:
          case DataTypes.W_DOUBLE:
            return (Double) in;
          case DataTypes.SHORT:
          case DataTypes.W_SHORT:
            return ((Number) in).doubleValue();
          case DataTypes.CHAR:
          case DataTypes.W_CHAR:
            return Double.parseDouble(String.valueOf((Character) in));
          case DataTypes.BOOLEAN:
          case DataTypes.W_BOOLEAN:
            return ((Boolean) in) ? 1d : 0d;
          case DataTypes.W_BYTE:
          case DataTypes.BYTE:
            return ((Byte) in).doubleValue();
        }
    
        throw new RuntimeException("cannot convert <" + in + "> to a numeric type: " + in.getClass() + " [" + type + "]");
    
    }
    
    200只不过是
    数据类型。EMPTY
    当前不由MVEL处理。因此,由于没有匹配的大小写,它会引发异常


    因此,仍然“空”在MVEL中没有完全实现,这三个问题都与MVEL问题有关

    对于
    Q1和Q2

    对于
    empty
    运算符,MVEL有一个类
    BlankLiteral
    ,它有一个方法

    public boolean equals(Object obj) {
        if (obj == null || "".equals(valueOf(obj))) {
          return true;
        }
        else if (isNumeric(obj)) {
          return "0".equals(valueOf(obj));
        }
        else if (obj instanceof Collection) {
          return ((Collection) obj).size() == 0;
        }
        else if (obj.getClass().isArray()) {
          return getLength(obj) == 0;
        }
        return false;
      }
    
    不处理您在
    Q1和Q2中询问的案例

    Q3,表达式
    integerValue==空

    MVEl试图将
    empty
    强制转换为Number,控制权由此类
    MathProcessor.class

    方法是

    private static Double getNumber(Object in, int type) {
        if (in == null)
          return 0d;
        switch (type) {
          case BIG_DECIMAL:
            return ((Number) in).doubleValue();
          case DataTypes.BIG_INTEGER:
            return ((Number) in).doubleValue();
          case DataTypes.INTEGER:
          case DataTypes.W_INTEGER:
            return ((Number) in).doubleValue();
          case DataTypes.LONG:
          case DataTypes.W_LONG:
            return ((Number) in).doubleValue();
          case DataTypes.STRING:
            return Double.parseDouble((String) in);
          case DataTypes.FLOAT:
          case DataTypes.W_FLOAT:
            return ((Number) in).doubleValue();
          case DataTypes.DOUBLE:
          case DataTypes.W_DOUBLE:
            return (Double) in;
          case DataTypes.SHORT:
          case DataTypes.W_SHORT:
            return ((Number) in).doubleValue();
          case DataTypes.CHAR:
          case DataTypes.W_CHAR:
            return Double.parseDouble(String.valueOf((Character) in));
          case DataTypes.BOOLEAN:
          case DataTypes.W_BOOLEAN:
            return ((Boolean) in) ? 1d : 0d;
          case DataTypes.W_BYTE:
          case DataTypes.BYTE:
            return ((Byte) in).doubleValue();
        }
    
        throw new RuntimeException("cannot convert <" + in + "> to a numeric type: " + in.getClass() + " [" + type + "]");
    
    }
    
    200只不过是
    数据类型。EMPTY
    当前不由MVEL处理。因此,由于没有匹配的大小写,它会引发异常


    因此,仍然“empty”未在MVEL中完全实现

    我在提交时添加了空文本缺少的实现部分:


    该修复程序将在下一个mvel版本(2.2.3.Final)中提供。感谢您的报告。

    我在提交时添加了空文本缺少的实现部分:


    该修复程序将在下一个mvel版本(2.2.3.Final)中提供。感谢您的报告。

    我在提交时添加了空文本缺少的实现部分:


    该修复程序将在下一个mvel版本(2.2.3.Final)中提供。感谢您的报告。

    我在提交时添加了空文本缺少的实现部分:

    该修复程序将在下一个mvel版本(2.2.3.Final)中提供。感谢您的支持