Zajmuję się tworzeniem aplikacji na Androida i jestem bardzo nowy w Javie i Androidzie.Plik stałych Javy
Chcę utworzyć pewne stałe do użycia w niektórych czynnościach. Gdzie mogę zdefiniować te stałe?
Dzięki.
Zajmuję się tworzeniem aplikacji na Androida i jestem bardzo nowy w Javie i Androidzie.Plik stałych Javy
Chcę utworzyć pewne stałe do użycia w niektórych czynnościach. Gdzie mogę zdefiniować te stałe?
Dzięki.
Jest uważany za złą praktyką w Javie, a większość języków OO, aby zdefiniować klasę po prostu trzymać stałe. Znacznie lepiej jest zdefiniować stałe w klasie, z którą są powiązane. Zwykle jest jeden. na przykład
interface MyComponent {
/** The default height for a component */
public static final int DEFAULT_HEIGHT = 5;
// other stuff
}
Jeśli naprawdę nie ma nikogo, możesz zdefiniować oddzielną klasę.
EDIT: Najważniejsze rzeczy są tu:
Normalnie, można użyć klasy Stałe lub zdefiniować je w klasach, w których są one stosowane, a la:
class Constants {
public static final int NUM_TRIANGLES = 4;
public static final String SOME_TEXT = "This is a constant";
}
Potem odnieść się do nich:
String inst = Constants.SOME_TEXT;
Znam twoje przykłady, ale chciałbym podkreślić, że nie należy używać CONST_ jako przedrostka dla stałych. ALL_CAPS jest standardowym sposobem wskazania stałej. –
Można również utworzyć interfejs zamiast klasy. –
Tak, to tylko przykład, i prawdopodobnie przypomina to tło pytającego, jeśli pochodzi z C/C++ (co jest odczuciem, które dostałem z pytaniem). – billjamesdev
Możesz zdefiniować pewne stałe w wyliczeniach Java.
Pojedynczy moduł wyliczający Java może zawierać wiele pól powiązanych danych.
Oracle zapewnia this introduction to Java enumerations.
Dostęp do modułów wyliczających jest dość powolnym działaniem, w porównaniu do zmiennych lokalnych lub "statycznego finału" (który, o ile wiem, dostaje inline skompilowany przez kompilator java). Również Enumeratory mają dość duży nakład, jeśli chodzi o wykorzystanie pamięci/przestrzeni. Zobacz http://developer.android.com/guide/practices/design/performance.html#avoid_enums – Tseng
Najczęstszym sposobem jest stworzenie „constants” w klasach były one potrzebne:
class Example {
private static final int FILENAME = "test.txt;
}
Zamiast prywatny może być również uznane default, chronione lub publiczne. Chociaż jest uważane za OO anti pattern do definiowania stałych to specjalna klasa "stałych" (God), która przechowuje stałe dla całej aplikacji. Alternatywnie można również zapisać dane konfiguracyjne w postaci Java properties file, co nie jest uważane za wzorzec.
Inną opcją, która szybko zyskuje popularność, jest użycie wzoru Dependency Inject (DI). Często ten wzór jest używany dla obiektu zależnego, ale można go również wykorzystać do wprowadzania wartości stałych do obiektów.Może to na przykład być realizowane z lekkiej ramy Guice DI Google:
class Example {
String filename;
@Inject
public Example(@ConfigFilename String filename) {
this.filename = filename;
}
W specjalnym Binder klasie będzie wiązać wartość do Strings opatrzone @ConfigFilename. W ten sposób masz minimalne sprzężenie i klasy, które mogą być niezależnie testowane.
Jeśli korzystam z pliku właściwości na Androidzie. Gdzie mogę to umieścić? – VansFannel
Istnieje kilka sposobów, na przykład czytanie pliku właściwości ze ścieżki klasy (katalog z klasami): http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property.html – Kdeveloper
Sztylet jest fajny też https://github.com/square/dagger – Caipivara
interesujące, po prostu czytałem, że zmienne i stałe nie powinny znajdować się wewnątrz interfejsu dla czytelności kodu. Zgadzam się z tym, ponieważ uważam, że dobre nazewnictwo i klasa "stałych" jest znacznie lepsza, ponieważ większość stałych będzie używana w różnych klasach. Jeśli używasz stałych do "konfigurowania" aplikacji, dobrze jest mieć wszystko w jednym miejscu. – WarrenFaith
Zmienne nie mogą znajdować się wewnątrz interfejsu. Stałe powinny być, jak sądzę, jeśli są odpowiednie dla wszystkich klas implementujących interfejs. Jeśli twoje stałe są używane przez WSZYSTKIE klasy, to tak, umieść je w klasie Constants (tak jak powiedziałem powyżej). Jeśli są używane do konfigurowania aplikacji, być może należą one do klasy Application. Kluczową sprawą jest sprawienie, by były łatwe do znalezienia i nie miały wysokiego sprzężenia z żadną klasą. Klasa Constants jest bardzo silnie sprzężona, jeśli nie jest traktowana z ostrożnością. – DJClayworth