-1

在下面的代码中,对函数内的布尔值 modifyPerson 所做的更改是否会保持不变,或者每次调用新函数时都会更改为其初始值。

另外我想知道如果我使用原始 boolean modifyPerson 而不是 Boolean 有什么区别。

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;
    }
}
4

4 回答 4

2

不,它不会传播,使用原语也无济于事。

解决此问题的最简单方法是返回更新的布尔值,并将方法调用的结果分配回变量。

于 2012-07-10T13:39:05.957 回答
2

modifyPerson原始变量是按值传递的,因此一旦方法退出,对参数的更改就会丢失。

如果您想保留更改,boolean请从您的方法返回,并将其分配给modifyPerson,如下所示:

boolean validateEffectiveIn(PersonDTO personDTO, TransactionLogDTO logDTO) {
    ...
    return modifyPerson; // true or false
}

...
modifyPerson = false;
modifyPerson |= validateEffectiveIn(person1DTO, logDTO);
modifyPerson |= validateEffectiveIn(person2DTO, logDTO);

您还可以创建自己的封装 a 的可变类boolean,并允许其用户获取和设置其值。

于 2012-07-10T13:39:44.970 回答
0

Java 是按值传递的。这意味着传递的任何原语或引用(如您在此处所使用的)都有一个本地副本,并且更改它不会更改调用者持有的值。

当您在设置此布尔值后抛出异常时,您不需要它。

于 2012-07-10T13:42:00.077 回答
0

我用过

boolean validateEffectiveIn(PersonDTO personDTO, TransactionLogDTO logDTO) {
return     modifyPerson; // true or false }  .

谢谢大家的帮助...

于 2012-07-16T13:53:15.033 回答