Бросить исключение из конструктора? - PullRequest
0 голосов
/ 15 октября 2019
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, если этот конструктор не работает, но он не позволяет мне сделать это из-за «Недоступного блока catch для ValidationException. Это исключение никогда не выдается из тела оператора 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);
    }
}

1 Ответ

0 голосов
/ 15 октября 2019

Ваш блок 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, как в вашемКод это не так. Не могу сказать, не видя всего этого.

...