2013-03-13 1 views
2

Я получаю предупреждение DeadStore с Findbugs на int i ниже. Я предпочитаю не писать однострочные изображения из-за удобочитаемости. Есть ли лучший способ написать это, чтобы не было DeadStore до i, но как можно читать?FindBugs Dead Store Предупреждение - Должен ли я реструктурировать код или игнорировать предупреждение

if (aqForm.getId() != null) { 
     try { 
      int i = Integer.parseInt(aqForm.getId()); 
      aqForm.setId(aqForm.getId().trim()); 
     } catch (NumberFormatException nfe) { 
      result.rejectValue("id", "error.id", "Please enter an integer."); 
      foundError = true; 
     } 
    } 

ответ

3

Вам не нужно назначить i. Вы можете просто позвонить parseInt() и игнорировать результат:

if (aqForm.getId() != null) { 
     try { 
      Integer.parseInt(aqForm.getId()); // validate by trying to parse 
      aqForm.setId(aqForm.getId().trim()); 
     } catch (NumberFormatException nfe) { 
      result.rejectValue("id", "error.id", "Please enter an integer."); 
      foundError = true; 
     } 
    } 

То есть, я бы создать вспомогательную функцию:

public static boolean isValidInteger(String str) { 
     ... 
    } 

и переписать свой фрагмент кода, как так:

String id = aqForm.getId(); 
    if (id != null) { 
     if (isValidInteger(id)) { 
     aqForm.setId(id.trim()); 
     } else { 
     result.rejectValue("id", "error.id", "Please enter an integer."); 
     foundError = true; 
     } 
    } 
+0

@EdgeCase: Не совсем. Фактически, это то, что я имел сначала, но затем отредактировал. Моя причина заключалась в том, что код, который я показывал, не был функционально таким же, как ваш код (ваш спокойно принимает «нуль», тогда как мой будет жаловаться на него). – NPE

5

Просто вызовите метод и игнорировать результат, в идеале с комментарием, чтобы объяснить, почему:

// Just validate 
Integer.parseInt(aqForm.getId()); 

Это не понятно, почему вы обрезку версию вы не проверенную, а не версия у вас есть, заметьте. Я бы предпочел:

String id = aqForm.getId(); 
if (id != null) { 
    try { 
     id = id.trim(); 
     // Validate the ID 
     Integer.parseInt(id); 
     // Store the "known good" value, post-trimming 
     aqForm.setId(id); 
    } catch (NumberFormatException nfe) { 
     result.rejectValue("id", "error.id", "Please enter an integer."); 
     foundError = true; 
    } 
} 
+0

я считал, что , но Netbeans навязывает мне назначение переменной parseInt() переменной. Думаю, я проигнорирую Netbeans вместо FindBugs. – EdgeCase

 Смежные вопросы

  • Нет связанных вопросов^_^