Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables_Scope - Fatal编程技术网

Java:将非静态变量分配给静态变量

Java:将非静态变量分配给静态变量,java,variables,scope,Java,Variables,Scope,我使用一个名为GlobalVar的类来存储整个应用程序所需的一些全局变量。这个类看起来像这样: public class GlobalVar { MyProps props = new MyProps(); public GlobalVar() throws Exception { } public static String PPFirstName = "Kim"; public static String PPLastName = "S

我使用一个名为GlobalVar的类来存储整个应用程序所需的一些全局变量。这个类看起来像这样:

public class GlobalVar {

    MyProps props = new MyProps();

    public GlobalVar() throws Exception
    {

    }

    public static String PPFirstName = "Kim";
    public static String PPLastName = "Smith";


    String zip = props.Props.getIPZip("IPZip");
    public static String IPZip = zip;

}
但是,在最后两行中,我得到了一个错误:

Cannot assign non static variable to static variable. 
我理解问题的根源,因为zip是非静态的,而IPZip是静态的。我的问题是:有没有办法解决这个问题?也就是说,有没有办法将Props中的值集分配给IPZip静态变量


注意:使用此方法的目的是我能够在应用程序中的任何位置使用语法GlobalVar.IPZip。

您正在创建MyProps的实例,然后调用其非静态getIPZip方法。不能将非静态方法的结果分配给静态变量

相反,您需要将getIPZip方法转换为MyProps类的静态方法,然后您可以像这样将其结果分配给yor IPZip变量

public static String IPZip = MyProps.getIPZip("IPZip");
然后,您可以使用GlobalVar.IPZip在任何地方访问IPZip

但是,如果将getIPZip方法设置为静态,那么在GlobalVar类中添加另一个变量有些不必要,因为您可以调用MyProps.getIPZipIPZip;代码中的任意位置


另一种选择是将getIPZip方法移动到GlobalVar类中,并使其成为其中的静态方法,然后可以调用GlobalVar.getIPZipIPZip

我可能不完全理解,但你为什么不能这样做

public static String IPZip = props.Props.getIPZip("IPZip");

这很可能是一个设计问题,而不是以后分配。您是否考虑过使用其他全局变量持久性方法?您能将您的GlobalVar类转换为具有getter和setter的POJO吗?如果您担心会使用多个类副本,可以使用单例模式