Fjo*_*rdo 1 java null integer drools
我不知道在Java中是否可行,但我需要一种方法来执行特殊的“添加功能”。让我解释,
简短版本:是否可以将 int 与 Integer 对象相加?我需要一个方法来检查该整数对象是否存在,如果该对象为空,则添加 0,否则添加正确的值,否则我尝试过
public static Integer isNull(Integer bonus){
if (bonus == null)
return Integer.valueOf(0);
else
return bonus;
}
Run Code Online (Sandbox Code Playgroud)
但我无法进入“null”分支。
完整版本:整数奖金值是触发 Drools 规则的结果。此规则使用 insertLogical(new object) 语句返回此整数奖金。根据流口水手册,
insertLogical(new Something ()); 与 insert 类似,但是当没有更多事实支持当前触发规则的真实性时,该对象将自动收回。换句话说,一旦该规则的条件不再为真,引擎就会撤回逻辑插入的事实。这通常被称为“真相维护”
因此,只要规则有效,Bonus 对象就存在并且正常总和有效;但是当规则被撤销并且奖金被销毁时,我需要这笔钱继续有效
出于成瘾,我可以说我正在尝试使用 Drools 来实现 Magic The Gathering 纸牌游戏;所以我尝试编写“当某事,所以某事”之类的卡片。对于 insertLogical,我想我只需要关心规则的激活,而不是它的删除。
我希望我的问题很清楚,很抱歉我的英语不好
更好的解释(也许):事情没那么简单,卡片有一个整数值,有时,根据触发的规则,这个值可能会改变。我不想手动更改该值,因为该值可以通过多种方式更改,因此我需要 insertLogical() ,以免在规则不再存在时再次更改这些值。
示例:我有一张牌在场,其数值为 3。然后我打出另一张牌,将该数值增加到 4,但前提是第二张牌仍在场中。通常,使用 Drools insert 语句,我必须编写一些代码来增加该卡的值字段(映射到 Java 类),然后编写一些代码来在第二张卡不再使用时减少该值。通过 insertLogical (如果我理解正确的话)我可以免费获得减少代码。问题是 inserteLogical 仅适用于新的 java 对象(不适用于现有对象,或者最重要的是不适用于对象字段);所以我声明一个新的 Bonus 对象(正或负整数),我可以添加到卡值中,但它可以随时销毁,并且“添加”功能必须仍然有效。
当第二张牌打出时(或者已经打出第一张牌)我必须像这样修改第一张牌的值
card.value=card.value + isNull(bonus)
Run Code Online (Sandbox Code Playgroud)
所以如果奖金(第二张卡)存在或不存在,它可以自动改变
使用 java 8 可以是:
public int zeroIfNull(Integer bonus) {
return Optional.ofNullable(bonus).orElse(0);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14869 次 |
| 最近记录: |