Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中实现单个全局变量_Java_Android_Firebase_Firebase Realtime Database_Firebase Authentication - Fatal编程技术网

如何在Java中实现单个全局变量

如何在Java中实现单个全局变量,java,android,firebase,firebase-realtime-database,firebase-authentication,Java,Android,Firebase,Firebase Realtime Database,Firebase Authentication,我现在正在做一个安卓项目,我正在使用Firebase。我将在应用程序的大多数活动中使用FirebaseAuth和FirebaseDatabase,我必须在活动的每个基础类中设置它们的实例,这似乎很奇怪 有没有一种方法可以在我的项目中实例化这些对象的单个全局实例,以便我可以在整个项目中引用它们 我想我会在某个地方创建一个静态类,比如 public static class GlobalVars { public static final FirebaseAuth AUTH = Fireba

我现在正在做一个安卓项目,我正在使用Firebase。我将在应用程序的大多数
活动中使用FirebaseAuth和
FirebaseDatabase
,我必须在
活动的每个基础类中设置它们的实例,这似乎很奇怪

有没有一种方法可以在我的项目中实例化这些对象的单个全局实例,以便我可以在整个项目中引用它们

我想我会在某个地方创建一个静态类,比如

public static class GlobalVars {
    public static final FirebaseAuth AUTH = FirebaseAuth.getInstance(); 
    public static final FirebaseDatabase DB = FirebaseDatabase.getInstance();
}
然后我会在另一个类中使用

GlobalVars.AUTH
但我不确定这是否是一个好的编程实践

谢谢你的帮助
谢谢:)

您应该使用Singleton,最好的方法是使用Enum。查看有效Java,第二版,第3项-使用私有构造函数或枚举类型强制singleton属性

public enum FireBase {
INSTANCE;

public void firebaseInstace() {
// Your code goes here...
}
}


PS:还想补充一点,使用Enum将保证您的类受到序列化或反射攻击的保护。

您应该使用Singleton,最好的方法是使用Enum。查看有效Java,第二版,第3项-使用私有构造函数或枚举类型强制singleton属性

public enum FireBase {
INSTANCE;

public void firebaseInstace() {
// Your code goes here...
}
}


PS:还想补充一点,使用Enum将保证您的类受到序列化或反射攻击的保护。

您可以使用
单例。要创建它,可以使用以下代码:

public static class FirebaseAuth {

    private FirebaseAuth instance;

    private FirebaseAuth() {
        // private constructor that nobody else can create an instance of your class
    }

    public static FirebaseAuth getInstance() {
        if (instance == null) {
            //create instance if necessary
            instance = new FirebaseAuth();
        }
        return instance;
    }
}
但是你的代码也在工作。尽管如此,我还是赞同单例模式,因为它对大多数程序员来说是众所周知的

编辑:正如@joshsp98所指出的,单身被认为是不好的做法。提供了关于何时使用单例和何时避免单例的非常好的信息


另外@Klitos Kyriacou指出Firebase已经内置了这一功能,所以不妨尝试一下?

你可以使用一个
单例。要创建它,可以使用以下代码:

public static class FirebaseAuth {

    private FirebaseAuth instance;

    private FirebaseAuth() {
        // private constructor that nobody else can create an instance of your class
    }

    public static FirebaseAuth getInstance() {
        if (instance == null) {
            //create instance if necessary
            instance = new FirebaseAuth();
        }
        return instance;
    }
}
但是你的代码也在工作。尽管如此,我还是赞同单例模式,因为它对大多数程序员来说是众所周知的

编辑:正如@joshsp98所指出的,单身被认为是不好的做法。提供了关于何时使用单例和何时避免单例的非常好的信息


此外,@Klitos Kyriacou指出Firebase已经内置了此功能,因此不妨尝试一下?

获取Firebase功能实例的代码经过优化,可以频繁调用。在每个需要它的类中调用
FirebaseAuth.getInstance()
完全可以


对于我使用的每个Firebase功能,我倾向于为每个类提供一个成员字段,然后在构造函数或
onCreate()
中初始化该字段,并在该类的其他地方使用。

用于获取Firebase功能实例的代码经过优化,可以频繁调用。在每个需要它的类中调用
FirebaseAuth.getInstance()
完全可以



对于我使用的每个Firebase功能,我倾向于为每个类提供一个成员字段,然后在构造函数或
onCreate()
中初始化该字段,并在该类的其他地方使用。

我认为您希望使用
singleton
这种方法会奏效。你甚至可以做一个静态导入,这样你就可以在你的类中将它引用为“AUTH”。singleton不是一个坏习惯吗?你可以让它们都从某个父类中派生出来……我想:)Firebase本身使用singleton,所以你不必;-)-FirebaseDatabase.getInstance()和FirebaseAuth.getInstance()将在每次调用时返回相同的实例。您是按照上面的操作并将它们分配到最终字段,还是在每次需要时在代码中调用它们,取决于您。我认为您希望使用
singleton
这种方法会奏效。你甚至可以做一个静态导入,这样你就可以在你的类中将它引用为“AUTH”。singleton不是一个坏习惯吗?你可以让它们都从某个父类中派生出来……我想:)Firebase本身使用singleton,所以你不必;-)-FirebaseDatabase.getInstance()和FirebaseAuth.getInstance()将在每次调用时返回相同的实例。您是按照上面的操作并将它们分配给最终字段,还是在每次需要时在代码中调用它们,这取决于您。好的,这是有意义的。正如我在上面所评论的,单身不被视为坏习惯吗?什么时候是使用它的好时机,什么时候不是?FirebaseAuth是一个现有的第三方类,而不是OP将要编写的类。@joshsp98我非常喜欢那篇文章:我在决定是否使用Singleton时总是使用它,但大多数时候我还是尽量避免it@Klitos我对firebase没有太多经验,因此我不知道这一点。但答案仍然回答了这个问题:“如何在Java中实现单个全局变量”对于未来的知识,我将把它标记为一个答案,因为它回答了我关于全局变量的问题,但并不特定于我的Firebase案例。考虑到其他人的意见,我将坚持我的解决方案。好的,这是有道理的。正如我在上面所评论的,单身不被视为坏习惯吗?什么时候是使用它的好时机,什么时候不是?FirebaseAuth是一个现有的第三方类,而不是OP将要编写的类。@joshsp98我非常喜欢那篇文章:我在决定是否使用Singleton时总是使用它,但大多数时候我还是尽量避免it@Klitos我对firebase没有太多经验,因此我不知道这一点。但答案仍然回答了这个问题:“如何在Java中实现单个全局变量”对于未来的知识,我将把它标记为一个答案,因为它回答了我关于全局变量的问题,但并不特定于我的Firebase案例。考虑到其他人的意见,我将坚持我的解决方案。我没有因为这一点而投反对票