【发布时间】:2016-04-13 05:57:04
【问题描述】:
我需要帮助来编写 Drools 规则。我有两个名为 Context 和 CreditReport 的类。
在触发规则之前,上下文作为事实插入到知识会话中。
我需要编写一条规则,当信用评分超过 800 时,在控制台上打印“优秀”。
理想情况下,我会将 CreditReport 直接插入会话中,但遗憾的是我没有该选项。
我写的规则看起来不太好:
- then 部分有一个 if 语句
- 我正在将对象类型转换为 CreditReport
感谢您的帮助!
// Context.java
public class Context {
private Map<String, Object> data = Maps.newHashMap();
public <T> T getData(final String key, final Class<T> clazz) {
return clazz.cast(data.get(key));
}
public void putData(final String key, final Object value) {
this.data.put(key, value);
}
}
// CreditReport.java
public class CreditReport {
private final String name;
private final int creditScore;
public String getName() {
return this.name;
}
public int getCreditScore() {
return this.creditScore;
}
}
//主要方法
context.put("creditReport", new CreditReport("John", 810));
session.insert(Arrays.asList(context));
session.fireAllRules();
// 规则
rule "Excellent_Score"
when Context($creditReportObject : getData("creditReport"))
then
final CreditReport creditReport = (CreditReport) $creditReportObject;
if (creditReport.getCreditScore() >= 800) {
System.out.println("Excellent");
}
end
【问题讨论】: