Не удалось вызвать исключение для метода @override - PullRequest
2 голосов
/ 20 февраля 2020
@Override
protected void configure() throws IOException{

        Properties props = new Properties();
        props.load(new FileInputStream(System.getProperty("user.dir")+"/src/properties/android.properties"));
        Names.bindProperties(binder(), props);


}

Я не могу выдать какое-либо исключение для переопределенного метода. Я получаю ошибку удалить исключение. Это реализация модуля Guice.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

Вы не можете изменить интерфейс Module, но вы можете обойти его несколькими способами с Guice.

Вы можете заключить исключение:

try (InputStream in = new FileInputStream(System.getProperty("user.dir")+"/src/properties/android.properties")) {
   Properties props = new Properties();
    props.load(in);
    Names.bindProperties(binder(), props);
} catch (IOException e) {
  // Yes, it's hard to create Guice exceptions. It's just like that.
  Message message = new Message(List.of(this), "Unable to load properties file", e);
  throw new ConfigurationException(List.of(message));
}

Вы можете перемещать загрузка файла из модуля:

class MyModule extends AbstractModule {
  private final Properties properties;
  MyModule(Properties properties) {
    this.properties = properties;
  }
  @Override protected void configure() {
    Names.bind(binder(), props);
  }
}

И создайте свой модуль следующим образом. Обычно вы должны быть в состоянии выбросить ваши исключения за пределами реализации модуля.

Properties properties = new Properties();
try (InputStream in = FileInputStream(System.getProperty("user.dir")+"/src/properties/android.properties")) {
  properties.load(in);
}
Module module = new MyModule(properties);
1 голос
/ 20 февраля 2020

Добавили ли вы те же исключения IOException для родительского метода?

Если переопределить метод и если в сигнатуре исходного метода нет исключения IOException, то он не будет работать.

т.е.

interface A {

  void A() throws Exception;

}

class B implements A{

  @override
  public void A() throws Exception{
  }

}

вышеуказанный формат будет работать.

...