Java: использование окончательной статической INT = 1 лучше, чем просто нормальный 1? - PullRequest
5 голосов
/ 15 января 2010

Я только что видел класс (большой модуль API), где есть много вещей, как

readParamString(Object params, int index)

и они имеют в этом классе 10 полей

final static int PARAM1 = 1
...
final static int PARAM10 = 10

, которые используются с функциями readParam

но вы также можете использовать обычный int, например readParamString(o, 1);

финальный static int чем-то лучше, чем использование обычного int?

Ответы [ 7 ]

15 голосов
/ 15 января 2010

Одним из преимуществ объявления статической конечной константы является предотвращение множественных ссылок на одно и то же литеральное значение в коде, что потенциально может привести к нежелательному изменению; например если программист непреднамеренно меняет один литерал, не изменяя другие.

В вашем примере я бы поставил под сомнение значение объявления константы PARAM1 со значением 1, особенно если это является частным по отношению к содержащему классу и упоминается только один раз. Однако, если бы в буквальном значении было какое-то семантическое значение, тогда это могло бы быть более полезным; например,

public static final int LOAD_ACTION = 1;
public static final int SAVE_ACTION = 2;
public static final int DELETE_ACTION = 4;
public static final int MOVE_ACTION = 8;

Однако вместо этого подхода обычно используется перечисление.

9 голосов
/ 15 января 2010

Это глупо.

Причина извлечения числовых констант состоит в том, чтобы дать им говорящее имя. PARAM1..PARAM10 не очень красноречивы.

4 голосов
/ 15 января 2010

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

Это похоже на случай, когда я иногда сталкиваюсь с кодом C, который имеет такие вещи, как

#define ZERO 0
#define ONE 1

Там на самом деле не так много смысла. На самом деле, когда я вижу, что эти имена используются (а не когда я смотрю на определения), я испытываю желание перейти к определениям, чтобы убедиться, что имена не лгут (это было долгое, долгое время, но, Я на самом деле сталкивался с кодом, в котором, например, FALSE определен как 1, -1 или что-то отличное от нуля, что действительно очень плохо).


Редактировать: при втором взгляде кажется, что имена могут указывать, какое поле в первом параметре представляет интерес, и в этом случае имена могут иметь больший смысл - если имена имеют некоторую значимую связь с полем, чем просто числовое смещение. Трудно сказать, так ли это, потому что вы можете перефразировать код, с которым вы действительно работаете.

1 голос
/ 15 января 2010

Я думаю, что это не сделано для конечной статической переменной, но иметь говорящие имена.И даже PARAMETER1 более показательно, чем просто 1.Поэтому может улучшить понимание при чтении кода.

1 голос
/ 15 января 2010

Объявляя final static int, вы будете иметь единственную ссылку на переменную int. И еще одна важная вещь: вы не можете изменить значение int после объявления final. Если int не является окончательным, вы можете изменить значение переменной. Так что если вы не хотите менять значение переменной через наш код, тогда вы можете использовать final static int.

1 голос
/ 15 января 2010

да как-то лучше, чем использовать обычный int

Но если вы используете Java 5 или новее, enum лучше, чем final static переменные.

0 голосов
/ 15 января 2010

Может быть, это потому, что переменная встроена компилятором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...