Java中的静态变量用法-对象从不更改
我被分配了一个IT项目,在这个项目中,我们必须编写各种不同的GUI来完成各种事情。我们也在使用一个数据库。假设我们正在访问名为“数据库”的类中的“EntityManager”: 假设我在“GUI1”中,我想切换到“GUI3”。初始化“GUI3”后,我必须通过“setDatabase()”方法将“myDatabase”引用传递给它,但如果我想返回“GUI1”,我必须再次传递回数据库引用Java中的静态变量用法-对象从不更改,java,static,Java,Static,我被分配了一个IT项目,在这个项目中,我们必须编写各种不同的GUI来完成各种事情。我们也在使用一个数据库。假设我们正在访问名为“数据库”的类中的“EntityManager”: 假设我在“GUI1”中,我想切换到“GUI3”。初始化“GUI3”后,我必须通过“setDatabase()”方法将“myDatabase”引用传递给它,但如果我想返回“GUI1”,我必须再次传递回数据库引用 到目前为止,我已经有了大约15个GUI,当我知道可以很容易地替换它们时,复制并粘贴相同的代码会让人很恼火。在这种
到目前为止,我已经有了大约15个GUI,当我知道可以很容易地替换它们时,复制并粘贴相同的代码会让人很恼火。在这种情况下,在“Database”类中使用对我想要的任何内容的静态引用,而不是在所有“GUI*”类之间传递引用,这难道不是正确的吗 创建一个singleton数据库对象,其中每个人都访问同一个对象:
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
}
}
你考虑过制作一个
AbstractGUI
基类来包含共享代码吗?这正是我首先做的,但后来我的老师说根据OOP原则这是不正确的。。。我只是想验证一下,这个方法是否正确?我怀疑它会破坏OOP。瞧,Java提供了enum
,实际上就是这样。(从线程安全的角度来看,甚至比我的示例更好)。想一想,我要编辑我的帖子来反映它。@Downvotter请评论。
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
}
}