2017-02-20 35 views
1

У меня есть набор методов тха прочитать значение свойства и возвращает значение в Integer, Float или Строка.Заставляет использовать Integer вместо Int в методе возвращения

Проблема заключается в следующем:

В случае, если разработчик сделать это:

int value = prop.getValueInteger("id.property"); 

В случае, если метод не нашел свойство или иметь NumberFormatException, я вернусь нуль , В этом случае присваивание не выполняется с помощью NullPointerException. То же самое относится к методу Float версии (строки покрыты, потому что они не используют примитив с ним)

Я знаю, что программисты могут быть вынуждены поймать возможные исключения, но я предпочитаю, если есть какие-либо возможности заставить разработчика использовать Целое число вместо int.

+2

Нет, авто-распаковка это просто особенность Java как язык. Вы не можете отключить его. –

ответ

3

Чтобы предотвратить разработчики просто присваивание int, когда у вас есть значение, которое не может присутствовать вы можете вернуть Optional<Integer>

// never null 
Optional<Integer> value = prop.getValueInteger("id.property"); 
if (value.isPresent()) { 
    int v = value.get(); 

Вы также можете ценить Optional<Float> и Optional<String> снова сделать обработку значение, которое не может быть явным.

Другой вариант - никогда не возвращать null, а вместо этого использовать значение по умолчанию.

int value = prop.getValueInteger("id.property", -1); 

Это предполагает, что вы не можете бросить более полезным исключение как

public int getValueInteger(String name) throws IllegalStateException { 
    Object v = getValue(name); 
    if (v == null) throw new IllegalStateException("Property " + name + " not set."); 
    return convertTo(Integer.class, v); 
} 
+1

+1 но не такая уж большая разница, еще один намек для программиста. Он все еще мог делать 'int value = prop.getValueInteger (" id.property "). Get();' –

+0

@ CarlosHeuberger действительно. Я видел 'optional.orElse (null)' Вы можете обойти его, но это побудит разработчика подумать об этом. –

+1

Это отличный ответ, во всяком случае, у меня есть перегруженные версии методов со значением по умолчанию. Мне нравится Необязательный тип – Genaut