2015-06-01 40 views
6

Ho una classe con variabili statiche come:aggiornare le variabili statiche in Java

class Commons { 
public static String DOMAIN ="www.mydomain.com"; 
public static String PRIVATE_AREA = DOMAIN + "/area.php"; 
} 

E se cerco di cambiare dominio da un'attività di Android (o un'altra classe java) in fase di esecuzione, la modifica della variabile di dominio, ma PRIVATE_AREA non cambiare Perché?

+0

Non introdurre le variabili statiche mutabili - questo è uno dei peggiori anti-pattern in java che introduce problemi di entropia e manutenibilità – rgasiore

risposta

6

Questo perché l'assegnazione dei campi statici avviene una volta che la classe viene caricata (si verifica una sola volta) nella JVM. La variabile PRIVATE_AREA non verrà aggiornata quando la variabile DOMAIN viene modificata.

public class Test { 
    public static String name = "Andrew"; 
    public static String fullName = name + " Barnes"; 
    public static void main(String[] args){ 
     name = "Barry"; 
     System.out.println(name); // Barry 
     System.out.println(fullName); // Andrew Barnes 
    } 
} 

Suggerisco di utilizzare la seguente struttura.

public class Test { 
    private static String name = "Andrew"; 
    public static String fullName = name + " Barnes"; 

    public static void setName(String nameArg) { 
     name = nameArg; 
     fullName = nameArg + " Barnes"; 
    } 

} 

Test2.java

public class Test2 { 

    public static void main(String[] args){ 
     System.out.println(Test.fullName); // Andrew Barnes 
     Test.setName("Barry"); 
     System.out.println(Test.fullName); // Barry Barnes 
    } 
} 
+0

c'è un modo per aggiornare la seconda variabile o condividere le variabili tra le altre classi? – AlexBerry

+0

@AlexBerry Vedi la mia modifica! – SamTebbs33

+0

Considerando che stai usando fondamentalmente un setter, ti consiglio di usare la struttura setter/getter invece della statica al primo posto. – Wald

0

PRIVATE_AREA did't cambiamento perché è impostato sul momento della dichiarazione. Quando modifichi DOMAIN, non ha alcun effetto su PRIVATE_AREA. Forse è meglio lavorare con setter (...) e getter() Metodi e variabili locali. Ottenendo PRIVATE_AREA Crei nuovamente il valore retrun.

0

Assegnazione delle variabili avviene al tempo di caricamento di questo è di classe per questo che dopo che se si modifica il valore di una variabile statica, essa non rifletterà là dove viene assegnato a un'altra variabile

Problemi correlati