Java 在多个函数调用中传递时布尔值的永久化
在下面的代码中,对函数中的布尔值modifyPerson所做的更改是保持不变,还是在每次调用新函数时更改为其初始值 另外,我想知道如果我使用基本布尔modifyPerson而不是布尔,有什么区别Java 在多个函数调用中传递时布尔值的永久化,java,Java,在下面的代码中,对函数中的布尔值modifyPerson所做的更改是保持不变,还是在每次调用新函数时更改为其初始值 另外,我想知道如果我使用基本布尔modifyPerson而不是布尔,有什么区别 public void validatePersonDTO(PersonDTO personDTO, TransactionLogDTO logDTO,ArrayList regionIdList,Boolean modifyPerson) { try { validateEf
public void validatePersonDTO(PersonDTO personDTO, TransactionLogDTO logDTO,ArrayList regionIdList,Boolean modifyPerson) {
try {
validateEffectiveIn(personDTO, logDTO,modifyPerson);
validateCdsId(personDTO, logDTO,regionIdList,modifyPerson);
validateEmpFirstName(personDTO, logDTO);
validateEmpLastName(personDTO, logDTO);
validateFinDept(personDTO, logDTO,modifyPerson);
validateEmployeeClass(personDTO, logDTO,modifyPerson);
validateWorkLoadandBudgetFTE(personDTO, logDTO,modifyPerson);
validateStatusandDescription(personDTO, logDTO,modifyPerson);
validateSalGrade(personDTO, logDTO);
validateCostRate(personDTO, logDTO);
validateJobCode(personDTO, logDTO,modifyPerson);
validateRateCardCharged(personDTO, logDTO);
validateSupervisorId(personDTO, logDTO);
}catch (Exception e) {
logDTO.setGyr("R");
logDTO.setMessage(logDTO.getMessage()+";"+"PersonDTO could not be validated");
//LOGGER.error("personDTO could not be validated: " + personDTO, e);
}
}
protected void validateEffectiveIn(PersonDTO personDTO, TransactionLogDTO logDTO,boolean modifyPerson) throws Exception{
todaysDate=convStringToDate(now(),Constants.DATE_PATTERN_LONG);
if(effIn.after(todaysDate)){
modifyPerson=true;
logDTO.setGyr("R");
logDTO.setMessage(logDTO.getMessage()+";"+"Error in Effective In date "+effIn.toString()+"cannot be greater than today’s date");
throw new Exception ("Error in Effective In date "+effIn.toString()+"cannot be greater than today’s date");
}
else{
modifyPerson=false;
}
}
不,它不会传播,使用原语也不会有帮助
最简单的方法是返回更新后的布尔值,并将方法调用的结果赋给变量。原语变量按值传递,因此一旦方法退出,对
modifyPerson
参数的更改将丢失
如果要保留更改,请从方法中返回boolean
,并将其分配给modifyPerson
,如下所示:
boolean validateEffectiveIn(PersonDTO personDTO, TransactionLogDTO logDTO) {
...
return modifyPerson; // true or false
}
...
modifyPerson = false;
modifyPerson |= validateEffectiveIn(person1DTO, logDTO);
modifyPerson |= validateEffectiveIn(person2DTO, logDTO);
您还可以创建自己的可变类,该类封装了一个
布尔值,并允许其用户获取和设置其值。Java是按值传递的。这意味着传递的任何原语或引用(正如您在这里所做的)都有一个本地副本,修改它不会更改调用者持有的值
设置此布尔值后,如果要抛出异常,则不需要它。我使用了
boolean validateEffectiveIn(PersonDTO personDTO, TransactionLogDTO logDTO) {
return modifyPerson; // true or false } .
谢谢大家的帮助……为什么不写一个测试并试一试?@ashwinsakthi我不会复制/粘贴你所有的代码,并期望人们阅读它,只要给我们你的代码的相关部分,如果我们需要其他东西来回答你的问题,我们会让你需要的。对不起,Hans……我会在以后的帖子中这样做……看到了吗