2013-03-16 5 views
0

У меня есть класс, который имеет много строковых полей. В сеттерах всех этих мест я должен сделать чек, как это (как данные могут быть нулевыми):Как избежать нулевой проверки

public void setAddress1(String address1) 
{ 
    this.address1 = Contract.checkNull(address1, ""); 
} 

Класс договора выглядит следующим образом:

public class Contract 
{ 
    public static checkNull(String input, String output) 
    { 
     return (null == input) ? output : input; 
    } 
} 

У меня есть несколько таких полей, как 'address1' выше. Есть ли какой-либо хороший метод, отличный от приведенного выше, чтобы избежать нулевого? Я прочитал avoiding != null, но применимо ли это здесь?

+3

Для этого несколько библиотек (guava, apache-commons) имеют метод типа Strings.defaultIfNull (str). В противном случае вы можете предположить хороший ввод; возможно, аннотируя параметр с помощью @ javax.annatotions.NotNull –

+1

Просто чтобы сделать список полным, я хотел бы упомянуть утверждения. Использование утверждений противоречиво: http://programmers.stackexchange.com/questions/137158/is-it-better-to-use-assert-or-illegalargumentexception-for-required-method-param – ATrubka

ответ

1

Вы можете использовать StringUtils.defaultString из Apache Commons Lang

public void setAddress1(String address1) 
{ 
    this.address1 = StringUtils.defaultString(address1, ""); 
} 
+1

OP также использует аналогичные реализации самого себя. вопрос в этом не так. – Juvanis

2

Если вы используете Java EE, вы можете использовать Java API проверки. NotNull - стандарт EE6.

@NotNull 
private String address1; 
public void setAddress1(String address1) 
{ 
    this.address1 = address1; 
} 

Если вы этого не сделаете, вы все равно можете использовать нечто подобное, хотя и нестандартное.

Другим хорошим подходом было бы использовать Null Object Pattern. При этом даже нули представляются как объекты.

+0

Я упомянул о Null Object Pattern, но как это реализовать с помощью String? – kaushik

+0

@kaushik, имеющий 'static final String NULL_STRING =" null ";' и используя это как значение по умолчанию. в зависимости от варианта использования - если вы не можете изменить объекты, которые у вас есть, и у них есть значения NULL, то я не думаю, что это полностью применимо – eis

+0

, однако он считает, что у вас может быть аннотация, которая заменит нули этим NULL_STRING. – eis

2

Я рекомендую вам импортировать утилиту Apache String, так как у вас есть много проверок String notnull. Поскольку все методы, предоставляемые этой утилитой, являются нулевыми, это означает, что когда аргументы равны нулю, он не бросает исключение NullPointException и может справиться с ним очень хорошо. here - это его API

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