2015-07-07 3 views
1

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

Подход 1: Я могу определить две константы, которые имеют значение 30.

public static final int ONE_MONTH=30 
public static final int LIST_SIZE_THIRTY=30 

подход 2: можно определить одну константу со значением 30.

public static final int THIRTY=30 

Оба правильны из синтаксиса Java перспективы. Хотя подход 1 дает больше информации, но должен определять две константы. Подход 2 - это просто номер, написанный на английском языке, и может использоваться как в тех местах, где мы предположили использовать ONE_MONTH и LIST_SIZE_THIRTY.

Какой подход рекомендуется и почему?

+0

См. [все вопросы, уже упомянутые в разделе «Шкафы программ» об магических числах] (http: // programers.stackexchange.com/search?q=magic+numbers+is%3Aquestion) – durron597

ответ

4

Что вы хотите, так это вопрос.

Вы хотите читаемость и повторное использование? Возьмите первый.

Вы хотите оптимизацию памяти? Возьмите второе решение.

Почему? Представьте, что завтра по любой причине будет 35 дней в месяц. со вторым, вам придется переработать все свое приложение, с первого раза вам нужно будет изменить 30-35.

EDIT: Чтобы быть ясным, первое решение от далекого лучшего, no сомнения, если вы не в очень-очень (очень очень очень ...) памяти ограничительного развития ...

+4

Вторая - так называемая оптимизация, которая не имеет смысла. Пожалуйста, предпочтете первый. Все дело в удобочитаемости. – duffymo

+0

Я бы вряд ли назвал объявление одной или двух меньших переменных. Это так же плохо, как использование 30 напрямую, потому что, если вы позже измените значение на 31, ваш код все еще читает тридцать раз, и вы все равно захотите его изменить. –

0

Если определить константу, такие как

public static final int LIST_SIZE_THIRTY=30 

это совершенно так же, как с помощью 30, потому что если размер по умолчанию становится 20, то не рекомендуется заканчивать чем-то вроде

public static final int LIST_SIZE_THIRTY=20 

или создать новую константу и заменить старый. Ваши постоянные значения будут значимыми, то есть они должны помочь тем, кто читает и поддерживает код (даже если он/она является автором кода).

так мое предложение что-то вроде:

public static final int ONE_MONTH=30; 
public static final int DEFAULT_LIST_SIZE=30; 

, потому что они имеют разные значения, то есть разные семантический. Если в вашей первой версии в требованиях указано, что размер списка по умолчанию равен one_month, вы можете это указать

public static final int ONE_MONTH=30; 
public static final int DEFAULT_LIST_SIZE=ONE_MONTH; 

P.S. Я не считал, что определение двух констант использует больше памяти, потому что это вопрос дизайна и одна или две (или даже более) переменные обычно не делают такой разницы в использовании используемой памяти в программе Java.

0

Существует одна альтернативы, изменить свой второй подход, как below-- Поддерживать один Константа class--

public class Constants{ 

public static final int NUMBER_THIRTY=30; 
.... 
... //rest of the class 

}

А затем используйте перечисления как below--

imprort ...Constants; 
public enum EnumConstants { 

     MONTH(Constants.NUMBER_THIRTY), 
      LIST_SIZE_THIRTY(Constants.NUMBER_THIRTY); 

     int value; 

    private EnumConstants(int value) { 
     this.value = value; 
    } 

    public int value() { 
     return value; 

    } 

} 

Таким образом, вы можете добиться повторного использования кода, удобочитаемости кода и maitainability. (в будущем, если значение месяца изменяется, как указано в одном ответе, тогда вам нужно только изменить значение в классе Constants.)

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