当前位置: 首页 > 知识库问答 >
问题:

在drools中比较整数会导致强制转换异常

邹斌
2023-03-14
when
    $list : List(size > 0 )
    $m1 : Map() from $list.get(0)
    $var1 : Map(stringToInt(this["number"]) <= 0) from $list.get(0)
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
    at org.mvel2.ast.Negation.getReducedValueAccelerated(Negation.java:48)

方言设置为java,我的drools版本是6.4.0。我如何避免这个错误?

编辑:字符串到int:

public static int stringToInt(String s) {
    try {
        int num = Integer.parseInt(s);
        return num;
    } catch (Exception e) {
        return -1;
    }
}

共有1个答案

秦鸿羽
2023-03-14

这对我管用。

创建一个会话,所有选项默认为。插入:

Map<String,String> map = new HashMap<>();
map.put( "number", "4711" );
List<Map<String,String>> list = new ArrayList<>();
list.add( map );
kieSession.insert( list );

运行DRL:

import static map.Main.stringToInt;
import java.util.*;
rule "int from map"
when
  $list : List(size > 0 ) 
  $m1 : Map() from $list.get(0)
  $var1 : Map(stringToInt(this["number"]) > 0 ) from $list.get(0)
then
  System.out.println( "got 4711" );
end
 类似资料:
  • 问题内容: 我是Java的新手,正在尝试理解为什么第一个代码片段不会导致此异常,而第二个代码片段会导致此异常。由于在两种情况下都将字符串数组传递到Arrays.asList中,所以两个代码片段都不应该产生异常还是不产生异常? 第一个代码段(毫无例外): 第二段(导致上述异常): 如果相关,我正在Eclipse Helios中使用JavaSE 1.6。 问题答案: 对我来说(使用Java 1.6.0

  • 我正在尝试使用Qpid JMS和ProtonJ(AMQP 1.0)发送和接收消息,但无法接收。异常表示它无法将转换为: 即使尝试以JmsTextMessage的形式接收消息,也会导致: 我正在发送如下消息: 我尝试通过以下方式接收邮件: 由于这不起作用,我尝试获取字节并使用toString方法: 结果如下: 在下一次测试中,我只使用字节并将其转换为字符串: 结果是<代码>Sw�测试消息。我想知道这

  • 抽象关系比较 虽然这部分的 隐含 强制转换经常不为人所注意,但无论如何考虑比较a < b时发生了什么是很重要的(和我们如何深入检视a == b类似)。 在ES5语言规范的11.8.5部分的“抽象关系型比较”算法,实质上把自己分成了两个部分:如果比较涉及两个string值要做什么(后半部分),和除此之外的其他值要做什么(前半部分)。 注意: 这个算法仅仅定义了a < b。所以,a > b作为b <

  • 例外情况: java.lang.ClassCastException:com.interconnect.library.gcm.util.checkplayServices(util.java:96),com.interconnect.library.gcm.regiseter.handleRegister(regiseter.java:53),com.interconnect.library.g

  • 我模拟了Jsch()类,并在下面的方法中获得了类强制转换异常。 原始方法。 联机获取Mockito异常。 例外情况: java.lang.ClassCastException:com.jcraft.jsch。频道$MockitoMock$1983492043不能转换为com.jcraft.jsch.ChannelSftp 测试用例调用方法。

  • 问题内容: 这是我尝试在Liferay Portal 6.0.6中运行portlet时得到的堆栈跟踪。 任何人都知道发生了什么事吗? 问题答案: 问题已经解决了。如上所述,问题是100%的类路径问题。尽管我用jarscan扫描了所有目录,但我找不到任何冗余。事实证明,我的同事使用了许多不必要的JAR,将它们不必要地添加到了我的WAR中。 现在正在工作! 谢谢大家;-)