Come gestire la conversione del tipo di una costante?

1

Considera il seguente estratto di codice (immaginario):

class X {
   private static String IS_PAYLOAD_REQUIRED = "4001";
   [....] 
   checkPayloadRequired(String input) {
     if (input.startsWith(IS_PAYLOAD_REQUIRED)) {
       settings.enable(Integer.valueOf(IS_PAYLOAD_REQUIRED).intValue());
     }
   }
 }

IS_PAYLOAD_REQUIRED è richiesto sia come String sia come int . Il codice sopra dela una costante String e converte in int in fase di runtime quando necessario. Questa conversione è economica ma non necessaria.

Vale la pena tentare di evitare la conversione? Posso pensare ai seguenti due modi per farlo. Apprezzo i commenti sull'utilità di entrambi.

1: Dichiara due variabili

private static String IS_PAYLOAD_REQUIRED = "4001";
private static String IS_PAYLOAD_REQUIRED_INT = Integer.valueOf(IS_PAYLOAD_REQUIRED).intValue();

Adesso usa una delle due costanti.

2: crea una classe StringAndInt     static static StringAnInt IS_PAYLOAD_REQUIRED = new StringAnInt (4001);

Utilizza IS_PAYLOAD_REQUIRED.intValue() o IS_PAYLOAD_REQUIRED.stringValue() . Non sto mostrando l'implementazione della classe qui perché è banale.

Il secondo è ovviamente più sicuro, ma mi chiedo se sia eccessivo.

    
posta Miserable Variable 09.03.2015 - 20:18
fonte

1 risposta

3

Is it worth trying to avoid the conversion?

Dipende. Questo è uno di quei casi in cui entra in gioco il consiglio di "prima misura". Se il tuo profiler dice che è un problema, allora si. In caso contrario, direi di no: è abbastanza leggibile con la conversione.

The second is obviously safer but I am wondering if it is an overkill.

Sì. Se si utilizzano le costanti, piuttosto che passare attorno a qualcosa che deve essere regolarmente convertito tra i due valori (e le esigenze della CPU sono ottimizzate più dello spazio), quindi avere due costanti va bene. È leggibile, è improbabile che non sia più sincronizzato ed è molto probabile che risolva problemi di prestazioni.

    
risposta data 09.03.2015 - 20:23
fonte

Leggi altre domande sui tag