Рейтинг:
12
Menci Lucio
Я решил так:
if (dtr == null) { // documentList does not contains the key
dtr = newDocument(fileRow); // may be null or not
documentList.put(currKey, dtr); // record even if it is null
}
if (dtr != null)
addRows(dtr, fileRow);
return true;
но это предупреждение компилятора настолько странно (я думаю, что компилятор не знает, что нулевое значение может быть передано методу put).
Richard MacCutchan
Вы все еще не показали нам точное сообщение об ошибке. Поэтому мы можем только догадываться, в чем может быть проблема.
Рейтинг:
0
Kornfeld Eliyahu Peter
Глобально мертвый код не будет означать никаких проблем после компиляции (даже я не вижу, где здесь какой-то мертвый код...), так что вам не нужно его бояться...
Однако я вижу там и другую проблему...
Ваша версия:
dtr = newDocument(fileRow);
documentList.put(getCurrentKey(fileRow), dtr); // what if dtr is null here?
if (dtr == null)
return true;
Моя версия:
dtr = newDocument(fileRow);
if (dtr == null)
return true;
documentList.put(getCurrentKey(fileRow), dtr); // put this line here to be sure
Menci Lucio
Я немного очистил свой код, чтобы увидеть только интересные строки для purpouse, но вместо этого исходный код:
TransferDocument dtr = (TransferDocument) documentList. get(getCurrentKey(fileRow));
был:
Строка currKey = getCurrentKey(fileRow);
TransferDocument ДТР = нуль;
если (documentList.containsKey(currKey)) {
dtr = (TransferDocument) documentList. get(currentKey);
if (dtr = = null) / / уже найдено в поиске, уже сделано
вернуть true;
}
Таким образом, уже сделанное предупреждение появится только один раз.
Kornfeld Eliyahu Peter
Значит, ваш исходный код таков?
protected boolean createDocument(String FileName, Row fileRow, ArrayList rows) {
String currKey = getCurrentKey(fileRow);
TransferDocument dtr = null;
if (documentList.containsKey(currKey)) {
dtr = (TransferDocument) documentList.get(currentKey);
if (dtr == null) // already found into the search, already done
return true;
}
if (dtr == null) {
dtr = newDocument(fileRow);
documentList.put(getCurrentKey(fileRow), dtr);
if (dtr == null)
return true;
}
addRows(dtr, fileRow);
return true;
}
На какой строке находится предупреждение о мертвом коде?
(Конечно, "if (dtr == null)" в строке 11 всегда истинно с точки зрения компилятора...
Menci Lucio
Я обновил свой код.
DocumentList может содержать ключ, а может и нет. Если он содержит ключ, его значение может быть нулевым, а может и не быть нулевым.
Есть четыре чека. Если есть ключ (первая проверка истинна) и его значение равно null (вторая проверка ложна), возвращается, если его значение не равно null, третья проверка ложна.
Если ключа нет (первая проверка false), то третья проверка истинна, newDocument может создать или не создать документ, поместить результат в список документов, а четвертая проверка может быть истинной или ложной (если документ создан или нет).
Никакие проверки не могут иметь только истинный или ложный результат.
documentList - это карта (точнее, древовидная карта). Я думаю, что компилятор не знает, что нулевое значение может быть передано методу put.