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,而在您的代码中却没有。看不到就无法分辨。

09-10 13:51