这是我的问题:我有很多课程需要访问特定的值(例如电子邮件地址),而不是在每个课程中一次又一次地声明它我想宣布它曾经使用某种全局变量访问它。
现在,在你反对者开始尖叫(或者对这篇文章进行投票)之前,我知道你可以宣布这样一个类:
public class GlobalVar{
public GlobalVar() throws Exception
{
}
public static String email = "myemail@gmail.com";
}
使用email
GlobalVar.email
我的问题是电子邮件的价值不能设置为静态,因为它来自文本文件(来自使用Java properties class
的密钥/属性)并且我无论如何都看不到从txt加载值如果我将变量设置为静态文件。
我基本上将动态生成的电子邮件存储在文件中,并在下次启动应用程序时检索它。当然,每次我需要使用变量时我都可以尝试检索它,但这并不优雅。
更新
提出了一个潜在的解决方案如下:
public static String email = null;
static {
email = "awesome@email.com"; // change to your initialization process
}
我认为这个解决方案可行但问题是如果txt文件中不存在先前的值,则在启动时动态生成该值。基本上,如果是第一次运行应用程序,则会生成一个新值。否则,将从txt文件(在上一次运行程序时生成)中检索该值。
如果我实施此解决方案,如果这是您第一次运行该程序,则电子邮件的值将等于null(在整个程序中)。
我基本上需要一种使用条件语句初始化静态变量的方法,但我不知道这是否可行。
由于
答案 0 :(得分:1)
要初始化静态变量,您可以使用static
(请参阅static initialization blocks):
public static String email = null;
static {
email = "awesome@email.com"; // change to your initialization process
}
另一种方法是使用静态函数:
class Mail {
public static String email = initializeMailVariable();
private static String initializeMailVariable() {
// initialization code goes here
}
}
答案 1 :(得分:0)
只需将GlobalVar类设置为具有getter和setter,当您从您正在执行的任何加载方法中读取文件时,请调用GlobalVar.setEmail("whatever")
,然后您可以使用{{1}从任何位置访问它}。
GlobalVar.getEmail()