2013-03-13 3 views
2

У меня есть мини-проект и много классов. Я создал исключение для поля, он не работаетИсключение с объектами в массиве

public C(..., int yearX, ...) throws InitException { 
     if (year == 2000) { 
      ... 
      year = yearX; 
      ... 
     } else 
      throw new InitAnneeEC(); 
    } 
+0

Может быть немного легче, если это на английском языке. , но вы также должны сделать код меньшим, то есть узким, где проблема равна – Coffee

+0

. Я думаю, вы не понимаете цели исключений. Если вы выбрали исключение в методе или конструкторе, этот метод или конструктор немедленно выйдет. Если это конструктор, конструкция объекта завершается неудачно, и он как будто объект никогда не создавался. Мне кажется, что это то, о чем вы жалуетесь, но на самом деле это именно то, как это * предполагается * работать, и на самом деле это единственная причина когда-либо вызывать исключение из конструктора: если вы хотите отменить создание объекта. –

+0

Когда исключение выбрасывается из конструктора объекта, ожидается, что он не будет инициализирован. Что вы хотите? –

ответ

2

Ваша проблема в конструкторе вы сравните year, но не установить это значение первого, так что исключение всегда бывает.

public C(..., int yearX, ...) throws InitException { 
     if (year == 2000) { 
      ... 
      year = yearX; 
      ... 
     } else 
      throw new InitAnneeEC(); 
    } 

Когда вы делаете if (year == 2000) на самом деле он используется значение по умолчанию: 0, так что сравнение всегда ложно. Я думаю, вы хотите установить значение anneeEC с значением anneeE.

Попробуйте изменить свой код так:

public C(..., int yearX, ...) throws InitException { 
     year = yearX; 
     if (year == 2008) { 
      ... 
     } else 
      throw new InitException(); 
    } 
Смежные вопросы