public Section(Course course, String sectionNumber)
throws SectionException
{
try
{
/* No checking needed as a course is defined by another class. */
this.thisCourse = course;
this.sectionNumber = DEFAULT_SECTION_NUMBER;
if( isValidSectionNumber(sectionNumber) )
this.sectionNumber = sectionNumber;
} catch( ValidationException ex )
{
throw new SectionException("Error in constructor", ex);
}
}
您好,这是我的代码,如果此构造函数失败,则需要抛出SectionException,但由于“ ValidationException的Unreachable catch块。我永远不会从try语句主体中抛出此异常”,因此我不允许这样做
我如何解决它?
这是可以正常工作的类似代码
public Student(String studentID, String firstName, String lastName)
throws StudentException
{
/* Initialize with the provided data using the validated values. */
try
{
if( isValidStudentID(studentID) )
this.studentID = studentID;
if( isValidFirstName(firstName) )
this.firstName = firstName;
if( isValidLastName(lastName) )
this.lastName = lastName;
} catch( ValidationException ex )
{
throw new StudentException("Error in constructor", ex);
}
}
最佳答案
您的catch块无法访问,因为try块中没有任何东西引发ValidationException
。手动抛出此异常,例如:
if (isValidSectionNumber(sectionNumber))
this.sectionNumber = sectionNumber;
else
throw new ValidationException("Validation error: section number invalid");
或者让您的渔获接受一般性错误,例如
catch (Exception e) { /* other code here */ }
或者,您也可以从if条件中使用的一种方法中抛出它。
我猜在您提供的工作代码中,一个或多个
isValidStudentId()
,isValidFirstName()
,isValidLastName()
会抛出一个ValidationException
,而在您的代码中却没有。看不到就无法分辨。