-1

以下のコードでは、関数内でブール値modifyPersonに対して行われた変更は維持されますか、それとも新しい関数が呼び出されるたびに初期値に変更されますか。

また、ブール値の代わりにプリミティブブール値のmodifyPersonを使用した場合、どのような違いがあるのか​​知りたいです。

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);

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 に答える