2010-08-19 5 views
0

Salut, j'ai 20 chaînes, dont chacune aura la même structure de paquet, sauf pour le nom de la classe. Ces chaînes doivent être transmises à la méthode selon les besoins. Reportez-vous au code ci-dessous:Quel est le meilleur? Passer le contenu entier comme une chaîne, ou une concaténation de chaîne?

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  
    } 

} 

Cela peut aussi se faire comme suit:

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

Et les cordes concaténer comme ceci:

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

Lequel serait mieux?

Répondre

2

Ils auront la même performance - la concaténation sera effectuée au moment de la compilation plutôt que le temps d'exécution car les deux parties sont constantes. Il y aura moins de chaînes dans le pool constant dans la version originale, certes - mais cela ne fera probablement pas de différence.

Que trouvez-vous plus lisible? Je ne peux pas dire qu'il y a beaucoup pour moi - je n'aime pas la répétition de la première forme, mais je ne suis pas sûr que je voudrais concaténer partout.

Une autre alternative est:

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

etc - donc vous effectuez la concaténation au point de la déclaration constante. Ensuite, vous pouvez simplement utiliser RECENT_MSG_ dans le code, comme dans le premier extrait, mais éviter la duplication "com.foo.xxs" selon la seconde.

EDIT: Une autre option que vous pouvez envisager est l'utilisation d'une énumération.

1

Je voudrais aller pour la première version, vous le rendre plus facile pour un lecteur de voir immédiatement ce que les chaînes signifient et quelles classes vous faites référence aussi. En outre, devrait vous voulez jamais introduire une classe à partir d'un espace de noms différent, vous serez en mesure de le faire.

La deuxième version, en revanche, introduit une logique qui doit d'abord être interprétée par un lecteur.

Si vous optez pour la deuxième version, utilisez l'alternative de Jon à la place, de sorte qu'au moins vous ayez encore la possibilité d'introduire des classes provenant d'autres espaces de noms.

+0

Merci! très bonne suggestion – GustyWind

Questions connexes