2012-09-07 11 views
5

Sono stato a conoscenza che e le costanti static final sono state allineate in fase di compilazione quando si utilizza Java.Controllo versione Android e inlining di costanti finali statiche

Guardando Using the Version-Aware Component - Add the Switching Logic e l'uso di Build.VERSION.SDK_INT e Build.VERSION_CODES mi confonde, come se i valori entrambe Queste costanti sono inline al momento della compilazione di questo approccio sarebbe inutile. Cosa mi manca qui?

Grazie :)

EDIT: come il fatto che sono in un metodo statico in un cambiamento di classe astratta questo tempo di compilazione inline?

risposta

3

Ciò che inline è costanti che possono essere determinati al momento della compilazione, come ad esempio:

private final int CONST = 1; 

Se si seleziona la source code (è una vecchia versione, ma suppongo che non è cambiato molto), le costanti guardare in questo modo:

public static final String SDK = getString("ro.build.version.sdk"); 

E questo è il metodo getString:

private static String getString(String property) { 
    return SystemProperties.get(property, UNKNOWN); 
} 

Quindi la costante non può essere determinata al momento della compilazione.

+1

fantastico - avrei dovuto controllare la fonte, in particolare come il suo un clic in più dai documenti che ho collegato sopra - scusa! +1 – Dori