2012-09-07 17 views
5

To było moje zrozumienie, że i static final stałe są wstawiane w czasie kompilacji podczas korzystania z Javy.Sprawdzanie wersji Androida i wprowadzanie statycznych stałych końcowych

Patrząc na Using the Version-Aware Component - Add the Switching Logic i użycie Build.VERSION.SDK_INT i Build.VERSION_CODES wprowadza mnie w błąd, jak gdyby obie te wartości stały się w czasie kompilacji, to podejście byłoby bezużyteczne. Czego tu mi brakuje?

Thanks :)

EDIT: czy fakt, że są w statycznej metody w klasie abstrakcyjnej zmiany tego czasu kompilacji inline?

Odpowiedz

3

Co inlined jest stałe, które mogą być określone w czasie kompilacji, takie jak:

private final int CONST = 1; 

Jeśli zaznaczysz source code (jest to stara wersja, ale przypuszczam, że nie zmieniła się znacznie), stałe wyglądać tak:

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

I to jest metoda getString:

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

Stała nie może być ustalona podczas kompilacji.

+1

fantastycznie - powinienem był sprawdzić źródło, zwłaszcza, że ​​jest to jedno dodatkowe kliknięcie z dokumentacji, do której jestem podłączony - przepraszam! +1 – Dori

Powiązane problemy