如何在java中检查多布尔值true或false>
我有8个布尔值。我想在8个布尔值中有一个或多个为false时回滚如何在java中检查多布尔值true或false>,java,Java,我有8个布尔值。我想在8个布尔值中有一个或多个为false时回滚 boolean flag = false; boolean flag1 = false; boolean flag2 = false; boolean flag3 = false; etc,,. flag = dbCall... 这里标志值改变 在这里我必须手动检查像 if(flag == false && flag1 == false &
boolean flag = false;
boolean flag1 = false;
boolean flag2 = false;
boolean flag3 = false;
etc,,.
flag = dbCall...
这里标志值改变
在这里我必须手动检查像
if(flag == false && flag1 == false && ....){
userTransaction = rollback;
}else{
userTransaction = commit;
}
有没有简单的方法可以检查java中的多重布尔值。您的代码最初有一个bug
if(flag = false && flag1 = false && ....){
userTransaction = rollback;
}
=赋值与==比较不同
接下来,使用当前样式,您可以将代码缩减为
if(! flag || !flag1 || ....){
userTransaction = rollback;
}
因为他们是布尔人,所以你不需要再次检查布尔人
我建议的最后一件事是,无论这些变量来自何处,都要维护一个列表并对它们进行迭代以检查所有变量,这样,即使有n个布尔值,与检查相关的代码仍然保持不变。您的代码最初有一个bug
if(flag = false && flag1 = false && ....){
userTransaction = rollback;
}
=赋值与==比较不同
接下来,使用当前样式,您可以将代码缩减为
if(! flag || !flag1 || ....){
userTransaction = rollback;
}
因为他们是布尔人,所以你不需要再次检查布尔人
我建议的最后一件事是,无论这些变量来自何处,维护一个列表并迭代它们以检查所有变量,这样,即使有n个布尔值,与检查相关的代码仍然保持不变。我认为这是处理此问题的最快方法 将您的标志写入列表或数组 像这样测试它 名单如下: 如果!myList.containsfalse//all true As数组
如果!myArray.asList.containsfalse//all true 我认为这是最快的处理方法 将您的标志写入列表或数组 像这样测试它 名单如下: 如果!myList.containsfalse//all true As数组 如果!myArray.asList.containsfalse//all true 您可以通过Apache对所有值执行和操作:
if (BooleanUtils.and(flag1, flag2, flag3, flag4)) {
userTransaction = commit;
} else {
userTransaction = rollback;
}
或者只是按照常规方式:
if (flag1 && flag2 && flag3 && flag4)) {
userTransaction = commit;
} else {
userTransaction = rollback;
}
您可以通过Apache对所有值执行和操作:
if (BooleanUtils.and(flag1, flag2, flag3, flag4)) {
userTransaction = commit;
} else {
userTransaction = rollback;
}
或者只是按照常规方式:
if (flag1 && flag2 && flag3 && flag4)) {
userTransaction = commit;
} else {
userTransaction = rollback;
}
下面呢
if(flag && flag1 && ....){
userTransaction = commit;
} else {
userTransaction = rollback;
}
下面呢
if(flag && flag1 && ....){
userTransaction = commit;
} else {
userTransaction = rollback;
}
如果不需要中间结果,则可以尝试以下方法:
boolean result = true;
boolean doRollback = true;
try {
result = db.doSomething1() && result; // ? && true -> ?;
result = db.doSomething2() && result; // if result: false then ? && result -> false
if (result) {userTransaction.commit(); doRollback = false;}
} finally {
if (doRollback) userTransaction.rollback();
}
这将确保执行每个db操作。。。该结果包含最终结果。如果不需要中间结果,则可以尝试以下方法:
boolean result = true;
boolean doRollback = true;
try {
result = db.doSomething1() && result; // ? && true -> ?;
result = db.doSomething2() && result; // if result: false then ? && result -> false
if (result) {userTransaction.commit(); doRollback = false;}
} finally {
if (doRollback) userTransaction.rollback();
}
这将确保执行每个db操作。。。该结果包含最终结果。在第二个示例中,您不是在检查,而是在赋值。简单和之间的否定作为思考这个问题的另一种方式,为什么有8个布尔值?您是否需要单独使用它们?然后返回第一个错误,为什么您要单独跟踪所有8个操作?如果您将调用链接起来,并且只有在没有任何错误时才继续进行可能会更好。在第二个示例中,您没有检查,而是分配。简单和之间的否定是思考这一问题的另一种方式,为什么你有8个布尔人?您是否需要单独使用它们?然后返回第一个错误,为什么您要单独跟踪所有8个操作?如果您将调用链接起来,并且只有在没有问题时才继续,可能会更好。我建议您直接使用列表,而不是维护数组并将其转换为列表:@sᴜʀᴇsʜᴀᴛᴛᴀ 泰修好了。作为sᴜʀᴇsʜᴀᴛᴛᴀ 说在一个列表中处理它更容易、更快我认为数组会更好。列表只能有装箱类型。数组可以有基元类型。List vs bool[],我认为这取决于数据结构。与其维护数组并将其转换为List,我建议直接获取列表:@sᴜʀᴇsʜᴀᴛᴛᴀ 泰修好了。作为sᴜʀᴇsʜᴀᴛᴛᴀ 说在一个列表中处理它更容易、更快我认为数组会更好。列表只能有装箱类型。数组可以有基元类型。列表vs布尔[]。我认为这取决于数据结构。最佳选项imho。简单易读。也可以是单行指令。最佳选项imho。简单易读。也可以是单行指令。我想在8个布尔值中的一个或多个为false时回滚。所以| |,而不是&,肯定是吗?@AndyTurner是的。那就是| |。错过了。谢谢。当8个布尔人中的一个或多个出现错误时,我想回滚。所以| |,而不是&,肯定是吗?@AndyTurner是的。那就是| |。错过了。谢谢你。