Что лучше? Передача всего содержимого в виде строки или конкатенации строк? - PullRequest
0 голосов
/ 19 августа 2010

Привет, у меня есть 20 строк, каждая из которых будет иметь одинаковую структуру пакета, кроме имени класса.Эти строки необходимо передать в метод по мере необходимости.См. Код ниже:

public static final String RECENT_MSG_        = "com.foo.xxs.RecentMessage";
public static final String PROJ_              = "com.foo.xxs.Proj";
public static final String FORECAST           = "com.foo.xxs.Forecase";
public static final String REQUEST            = "com.foo.xxs.Request";
public static final String UNAPPROVED         = "com.foo.xxs.UnApproved";
public static final String UNPOSTED           = "com.foo.xxs.Unposeted";
public static final String VACANT             = "com.foo.xxs.Vacant";
public static final String ORG_VIOL           = "com.foo.xxs.OrgViolation";
public static final String ORG_WARN           = "com.foo.xxs.OrgWarning";
public static final String EMP_VIOL           = "com.foo.xxs.EmpViolation";
public static final String EMP_WARN           = "com.foo.xxs.EmpWarning";    
public static final String TS_WARN            = "com.foo.xxs.TSWarn";
public static final String TS_VIOL            = "com.foo.xxs.TSViolation";
public static final String AGE_GROUP          = "com.foo.xxs.AgeGroup";


private void rescheduleTasks(long _taskType,String value)
{
    if(_taskType == 1000 &&(_sSchedTaskMgr.getInstance().getCurrentScheduledTaskInfo(RECENT_MSG_)==null))
    {

    // do something     
    }

}

Это также можно сделать следующим образом:

public static final String RECENT_MSG_        = "RecentMessage";
public static final String PACK                       ="com.foo.xxs."

И объединить строки следующим образом:

if(_taskType == 1000 &&(_sSchedTaskMgr.getInstance().getCurrentScheduledTaskInfo(PACK+RECENT_MSG_)==null))

Какой из нихбудет лучше?

Ответы [ 2 ]

2 голосов
/ 19 августа 2010

Они будут иметь одинаковую производительность - конкатенация будет выполняться во время компиляции, а не во время выполнения, поскольку обе части являются константами. Правда, в исходной версии будет меньше строк в пуле констант, но это вряд ли что-то изменит.

Что вы находите более читабельным? Я не могу сказать, что в этом есть много для меня - мне не нравится повторение первой формы, но в равной степени я не уверен, что хочу объединить везде.

Другая альтернатива:

public static final String PACK               = "com.foo.xxs."
public static final String RECENT_MSG_        = PACK + "RecentMessage";

и т. Д. - поэтому вы выполняете конкатенацию в точке объявления константы. Тогда вы можете просто использовать RECENT_MSG_ в коде согласно первому фрагменту, но избегать дублирования com.foo.xxs согласно второму.

РЕДАКТИРОВАТЬ: Другой вариант, который вы можете рассмотреть, это использование enum.

1 голос
/ 19 августа 2010

Я бы выбрал первую версию, вы просто сделаете так, чтобы читатель сразу увидел, что означают строки и какие классы вы тоже используете. Кроме того, если вы когда-нибудь захотите представить класс из другого пространства имен, вы сможете это сделать.

Вторая версия, напротив, вводит некоторую логику, которую читатель должен сначала интерпретировать.

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

...