1

在下面的代码行中,我在 while 循环中调用 validatePersonDTO 方法。如果 validatePersonDTO 的当前记录方法中发生任何错误,我需要返回到 while 循环来处理下一条记录。

笔记:

ValidatepersonDTo 方法位于 while 循环所在的另一个类中。

这是一个非常基本的问题,我已经尝试了一些选项,但是 continue 或 return 都不起作用。

所以请让我知道你的建议。

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),您在while循环中缺少一个 try/catch 块:

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,那么您可以用 a 包围它的调用,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 的方法返回一个真值(如果它执行成功),然后继续前进,或者如果返回假,则再次进入该方法并更新值。

你可以这样做

 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 回答