1

以下のコード行では、while ループ内で validatePersonDTO メソッドを呼び出しています。現在のレコードの validatePersonDTO のメソッド内でエラーが発生した場合は、while ループに戻って次のレコードを処理する必要があります。

ノート:

ValidatepersonDTo メソッドは、while ループが存在する別のクラスにあります。

これは非常に基本的な質問です。いくつかのオプションを試しましたが、続行も戻りも機能しません。

ですから、あなたの提案を教えてください。

while ((nextLine = reader.readNext()) != null) {
hrUploadValidator.validatePersonDTO(personDTO);
}

public void validatePersonDTO(PersonDTO personDTO) {
    try {           
        validateCdsId(personDTO, logDTO,regionIdList);          
        validateEmpFirstName(personDTO, logDTO);            
        validateEmpLastName(personDTO, logDTO);         
        validateEffectiveIn(personDTO, logDTO);
}
4

5 に答える 5

3

validatePersonDTO検証が失敗したときに が例外をスローすると仮定すると(メソッドが であるため、これが唯一のオプションです)、ループvoid内に try/catch ブロックがありません。while

while ((nextLine = reader.readNext()) != null) {
    try {
        hrUploadValidator.validatePersonDTO(personDTO);
    } catch (Exception ex) {
        // Log / otherwise process your exception here
    }
}

例外がログに記録されるか、catchブロックで処理されると、ループは中断したところから反復を続けます。

于 2012-07-12T12:13:39.477 に答える
0

try次のように、ループ コードに/を追加catchします。

while ((nextLine = reader.readNext()) != null)
{
    try
    {
        hrUploadValidator.validatePersonDTO(personDTO);
    }
    catch (Throwable x)
    {
    }
}
于 2012-07-12T12:13:21.740 に答える
0

メソッドvalidatePersonDTOが をスローする場合、Exceptionその呼び出しを で囲みtry-catch、catch ステートメントでステートメントを実行できますcontinue

于 2012-07-12T12:13:54.320 に答える
0

例外に反応したい場合は、それらをキャッチするのではvalidatePersonDTOなく、while ループでキャッチします。

while ((nextLine = reader.readNext()) != null) {
  try {           
    hrUploadValidator.validatePersonDTO(personDTO);
  } catch (ErrorThrownByValidationMethods e) {
    continue;
  } 
  // Processing
}

public void validatePersonDTO(PersonDTO personDTO) throw ErrorThrownByValidationMethods {

    validateCdsId(personDTO, logDTO,regionIdList);          
    validateEmpFirstName(personDTO, logDTO);            
    validateEmpLastName(personDTO, logDTO);         
    validateEffectiveIn(personDTO, logDTO);

}
于 2012-07-12T12:15:00.573 に答える
0

while が実行されたメソッドから true 値を返すブール識別子のフラグを使用して (正常に実行された場合)、次に進むか、false が返された場合はメソッドに戻って値を更新します。

あなたはこのようにすることができます

 boolean x=false;
   while(<your condition>&&x==false)
  {
     try
       {
          <your code>
          x=true; //last statement of try block
       }
     catch(Exception e)
     {
        x=false;
     }
  }
于 2012-07-12T12:15:32.267 に答える