0

嗨,我有 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))

哪一个会更好?

4

2 回答 2

2

它们将具有相同的性能 - 连接将在编译时执行,而不是在执行时执行,因为这两个部分都是常量。诚然,在原始版本中,常量池中的字符串会更少——但这不太可能产生影响。

你觉得哪个更具可读性?我不能说它对我来说有很多 - 我不喜欢第一种形式的重复,但同样我不确定我是否想在任何地方连接。

另一种选择是:

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

等等 - 所以你在常量声明点执行连接。然后您可以RECENT_MSG_按照第一个片段在代码中使用,但要避免按照第二个片段重复“com.foo.xxs”。

编辑:您可能要考虑的另一个选项是使用枚举。

于 2010-08-19T06:56:31.987 回答
1

我会选择第一个版本,您只是让读者更容易立即了解字符串的含义以及您所指的类。此外,如果您想从不同的命名空间引入一个类,您也可以这样做。

相比之下,第二个版本引入了一些需要读者首先解释的逻辑。

如果您选择第二个版本,请改用 Jon 的替代方案,这样至少您仍然可以选择从其他命名空间引入类。

于 2010-08-19T07:03:00.083 回答