Java中的静态变量用法 - 对象永远不会改变

时间:2015-08-02 14:05:03

标签: java static

我被分配了一个IT项目,我们必须编写各种不同的GUI来做各种事情。我们也在使用数据库。我们假设我们正在访问" EntityManager"在一个名为"数据库":

的类中
public class GUI1 {

    private Database myDatabase;
    public void setDatabase(Database DB){
        myDatabase = DB;
    }

}
public class GUI2 {

    private Database myDatabase;
    public void setDatabase(Database DB){
        myDatabase = DB;
    }

}
public class GUI3 {

    private Database myDatabase;
    public void setDatabase(Database DB){
        myDatabase = DB;
    }
}
etc...

让我们说我" GUI1"我想切换到" GUI3"。初始化" GUI3"我必须通过" myDatabase"通过" setDatabase()"来引用它方法,但如果我想回到" GUI1",我将不得不再次传回数据库参考...

到目前为止,我有大约15个GUI,当我知道可以轻松替换时,复制并粘贴相同的代码会很烦人。在这种情况下,在"数据库"中使用静态引用到我想要的内容是不正确的。而不是传递我所有的" GUI *"之间的引用。班?

1 个答案:

答案 0 :(得分:2)

创建一个单独的数据库对象,每个人都访问同一个对象:

public class Database {

    private Database(){ // privatize the constructor
        // your code here
    }


    private static Database INSTANCE;
    public static Database getInstance() {
        if(INSTANCE == null) {
            // let's make it thread-safe
            synchronized(Database.class) {
                if(INSTANCE == null) // may have changed in the mean while
                                     // by other thread
                    INSTANCE = new Database();
            }
        }
        return INSTANCE;
    }

}

编辑:更好的是,从线程安全的角度来看是enum

public enum Database {

    INSTANCE(); // pair of parenthesis, for constructor

    Database() { // constructor
        // your code here
    }

    public static Database getInstance() {
        return INSTANCE;// initialization controlled by system
    }

    public void someMethod(){
        // even allows you to add custom methods
    }

}