2014-11-26 4 views
0

У меня есть следующие сеттер:Чтобы проверить целое число больше 0

public void setId(String id) { 
     try{ 
      Integer partnerId = Integer.parseInt(id); 
      if (partnerId <= 0){ 
       throw new NumberFormatException(); 
      } 
     } catch(NumberFormatException e){ 
     } 
     this.id = id; 
    } 

Это хороший способ проверить, если переданный аргумент является целым числом больше 0?

+1

'IllegalArgumentException' будет достаточно? –

+0

Почему вы ловите исключение, которое вы просто бросаете и ничего не делаете с ним? – Pablo

+0

это любая причина, по которой вы сохраняете свой идентификатор как строку? во-вторых, поскольку вы обрабатываете исключение, которое вы бросаете, ваш чек избыточен – user902383

ответ

1

Не бросайте исключение NumberFormatException, потому что в формате не было ничего плохого, если строка была просто вне диапазона. Стандартное и правильное исключение для throw - это IllegalArgumentException с сообщением. И как общее правило (которое применимо здесь), вы не должны ловить эскрцию, но ничего не делать с этим.

Попробуйте это:

public void setId(String id) { 
    if (Integer.parseInt(id) < 1){ 
     throw new IllegalArgumentException("id must be greater than zero:" id); 
    } 
    this.id = id; 
} 

также:

  • удалил переменную INT, так как вы не используете это исключение для сравнения
  • удалили попробовать поймать - просто дайте пузырь исключение из , Если клиент прошел плохой Дара, что их проблема
3

NumberFormatException состояние:

Брошенный, чтобы указать, что приложение пытается преобразовать строки в один из числовых типов, но строка не имеет соответствующий формат.

Это не та ситуация, в вашем случае, если вы настаиваете, чтобы бросить исключение, реализовать свой собственный класс:

public class LowerThanZeroException extends Exception { 
    public LowerThanZeroException() { super("Number is lower than zero"); } 
} 

Или просто использовать IllegalArgumentException.

Я не думаю, что try и catch - лучший вариант для вас (хотя это действительно зависит от вашей логики), но рассмотрите также инструкцию if.

Также обратите внимание, что перехват исключения и ничего не делает с ним фактически скроет проблему.

+0

Итак, как правильно проверить это? –

+0

Я имею в виду, может быть, regexp будет лучше здесь? –

1

Сделать обычное исключение для (partnerId <= 0). но также исключайте исключение формата номера, потому что вы можете попытаться преобразовать строку в целое число. но если вы просто хотите проверить, меньше ли это число или нет, вы можете сделать это в if statement. Не нужно бросать исключение

1

Простейший способ для этого используется, если заявление

public void setId(String id) { 
     Integer partnerId; 
     try{ 
      partnerId = Integer.parseInt(id); 
     } catch(Exception e){ /*if parsing fails do ...*/ } 
     if (partnerId <= 0){ this.id = /*some default value*/ } 
     else {this.id = id;} 
} 
Смежные вопросы