Я объединяю существующие функции импорта и экспорта, чтобы уменьшить количество раз, когда пользователю сообщают, что в соединении было отказано, в случае, если соединение получило отказ. Библиотека, которую я вызываю, имеет отдельные функции импорта и экспорта, а также комбинированную функцию импорта / экспорта. Функция экспорта требует, чтобы список файлов был экспортирован, в то время как объединенная функция сама определяет список (и внутренне вызывает функцию экспорта с этим списком). Поскольку пользователь может отключить импорт или экспорт, я хочу получить список файлов только при необходимости.
Я придумал этот код:
List<File> files;
if (mExport)
files = ListFiles();
if (mExport && mImport && files.size() > 0) // Error is on files
DoExportAndImport();
else if (mImport)
DoImport();
else if (mExport && files.size() > 0) // No error here
DoExport(files);
Второй оператор if
помечается ошибкой Variable 'files' might not have been initialized
(но не последней).
Помогите мне с моими рассуждениями: если mExport
верно, то files
инициализируется; но если mExport
ложно, то второй оператор if
замыкается накоротко и никогда не достигает files
, поэтому не имеет значения, что files
не был инициализирован, потому что он не используется.
Я что-то упускаю из виду или это слишком сложная ситуация для компилятора? Если последнее, есть ли какой-нибудь способ сказать компилятору сбросить его, я обработал его?
Что касается записи, инициализация files = new ArrayList<>()
в объявлении отключает компилятор, как и files = null
, хотя это, очевидно, приводит к другим ошибкам; но кажется, что это пустая трата времени для инициализации значения, которое, как я знаю, никогда не будет использовано или упомянуто каким-либо образом.