我想在我的项目中使用Global变量,所以我只需要一个可以轻松设置并获取任何变量数据的类。
喜欢这个::
public class Glob_variable {
String Path = new String();
/**********************************************/
public void setPath(String Path) {
this.Path = Path;
}
public String getPath() {
return Path;
}
/**********************************************/
}
但是当我初始化它时,我得到一个null异常。 我通过创建Glob_variable类的对象来初始化它。
喜欢::
Glob_variable g = new Glob_variable();
g.setPath("asdasd");
当我在第二个活动中调用时,我在跟踪时得到了null变量。 我打电话给:
Glob_variable g = new Glob_variable();
g.getPath();
那么你能告诉我我犯了哪个错误吗?
答案 0 :(得分:2)
Glob_variable g = new Glob_variable();
将创建新实例,使用static
变量或应用singletone
<强> Singletone:强>
Glob_variable.getInstance().setPath("abc");
String path = Glob_variable.getInstance().getPath(");
答案 1 :(得分:1)
我认为这是因为你从另一个Glob_variable类的实例调用了get方法。
Glob_variable g = new Glob_variable();
g.setPath("asdasd");
String path = g.getPath();
以上代码有效。但是如果你在一个类中使用上面的代码后在另一个类/活动中使用下面的代码,那么它就是无效的,因为你在另一个类/活动中创建了另一个Glob_variable实例。
Glob_variable g = new Glob_variable();
String path = g.getPath();
在代码中尝试遵循单吨模式,
public class Glob_variable
{
private Glob_variable GVariableClass;
private static String Path;
private Glob_variable()
{
GVariableClass = this;
}
public static Glob_variable getInstance()
{
if ( GVariableClass == null )
{
GVariableClass = new Glob_variable();
}
return GVariableClass;
}
/**********************************************/
public void setPath(String Path) {
this.Path = Path;
}
public String getPath() {
return Path;
}
/**********************************************/
}
答案 2 :(得分:1)
嗯,这里有很多答案,但我想像你一样,你也来自VB(或类似的东西)世界(我看到你的所有变量都用大写字母大写!)。
您必须明白,与VB不同,Java中没有“REAL”全局访问。当您使用'new'运算符时,将创建该类的新实例,并根据构造函数契约重新分配所有值。因此,要删除用于存储全局值的变量的实例化。
第二个选项是静态变量,但我发现你在使用它们时遇到了困难。在这里,我有一种强烈的感觉,有时你在为它们赋值之前使用静态变量。你必须确保在你的getter之前总是调用你的setter。您甚至可以通过自定义异常,如下面的
public class Glob_variable {
static String Path = "";
/**********************************************/
public static void setPath(String Path) {
Glob_variable.Path = Path;
}
public static String getPath() throws Exception{
if("".equals(Path)){
throw new Exception("Variable no inited yet")
}
return Path;
}
/**********************************************/
}
使用Glob_variable.getPath()等访问变量。尝试遵循Java的命名约定,从长远来看,它将对您有所帮助:))
我发现以下链接对于理解单词http://www.javacoffeebreak.com/articles/designpatterns/index.html非常有用,请阅读它。
全局值是常量还是必须在运行时设置?如果它们是常量,那么我会说你创建一个带有final变量的接口并在你的代码中使用它们。