Я прочитал это: Могу ли я использовать броски в конструкторе? - что дало мне правильную идею и привело меня к одному ответу, но не было очень явным.Я также прочитал несколько других, но не смог найти свой ответ.Если вспомнить, что я узнал для контекста, по сути, это не скомпилирует ...
public ExampleClass(String FileName)
{
this(new FileInputStream(FileName));
}
public ExampleClass(FileInputStream FileStream)
{
DoSomethingToSetupBasedUponFileStream(FileStream);
}
... потому что конструктор FileInputStream
(вызывается из конструктора String) может генерировать исключение FileNotFoundException.Вы все еще можете создать конструктор, заставив it выдать такое же исключение, как показано ниже:
public ExampleClass(String FileName) throws FileNotFoundException
{
this(new FileInputStream(FileName));
}
Мой вопрос связан с конструктором по умолчанию (без аргументов), который просто использовал бы имя файла по умолчаниюСтроковая константа:
public ExampleClass() throws FileNotFoundException
{
this(DEFAULT_FILE_NAME);
}
Это будет связывать конструкторы как:
ExampleClass()
-> ExampleClass(<String>)
-> ExampleClass(<InputFileStream>)
InВ таком случае можно ли использовать значение по умолчанию (статический конечный член класса) в конструкторе по умолчанию, чтобы создать экземпляр (далее по цепочке) FileInputStream, но не нужно использовать код throws FileNotFoundException
(для этого потребуется кто-тос помощью класса перебрасывать или обрабатывать исключение?
Если бы я мог сделать что-то вроде следующего, я бы обработал исключение сам:
public ExampleClass()
{
try
{
this(DEFAULT_FILE_NAME);
}
catch (Exception e)
{
DoSomethingToHandleException(e);
}
}
...Однако, насколько я знаю, это невозможно, потому что «вызов конструктора должен быть первым оператором в конструкторе»
Будучи более привыкшим к .Net на данный момент, я никогда не был заставил иметь дело с бывшимиесли бы я действительно не хотел ...: D