Почему я получаю это необработанное исключение?

Используя интерфейс для обработки констант, я не могу вызвать предопределенный метод, который выдает исключение.

  public interface ParametresConstantes {
    public static final String DB_CONNEXION = ChargementProjetProperties.getInstance().getValueByKey("conn");
//a red line under the right part of this instruction.
    public static final int SIZE_TEXT_FIELD = 20;
}



public String getValueByKey (String key) throws Exception
{
    String value = null;
    load();
    if (props.containsKey(key))
    {
        value = props.getProperty(key);
    }
    else
    {
        throw new Exception ("no key found");
    }
    return value;
}

Как это исправить?

РЕДАКТИРОВАТЬ

Как обсуждено ниже, поскольку статический блок может работать не только на интерфейсе, но и на классе, его реализующем, а переменная является конечной и не может быть назначена, я временно заменил ее на else заблокировать value="" и убрал бросок и сохранил остальное.

Спасибо

3 ответа

Как вы сказали, проблема заключается в том, что вы не можете использовать метод, который выдает здесь исключение.

Синтаксически это будет работать со статическим блоком инициализации:

public static URI uri;

static {
  try {
    uri = new URI("http://www.example.com/image.jpg");
  } catch(Exception e) {
    //Eventually throw new IllegalArgumentException();
  }
}

Но я настоятельно советую не делать этого. ИМХО, статические блоки инициализации - подсказка, что с дизайном что-то не так.

Я думаю, что определение метода чище:

public String getDBConnection () {
  return ChargementProjetProperties.getInstance().getValueByKey("conn");
}

getValueByKey Метод выдает исключение, и вы нигде его не перехватываете. Вот почему говорится, что есть необработанное исключение. Вы должны объявить DB_CONNEXION в вашем интерфейсе, но определите его где-нибудь вниз по течению (классы, которые реализовали этот интерфейс), где вы можете обработать исключение.

static final String DB_CONNEXION Инициализация эквивалентна статической функции конструктора, и в ней, если исключение будет сгенерировано или вызвано, тогда не будет никакого шанса обработать исключение. Лучший способ - сохранить статическую функцию конструктора без исключений или зарегистрировать UncaughtExceptionHandler.

Другие вопросы по тегам