2015-08-07 2 views
-2

Я использую класс под названием GlobalVar для хранения некоторых глобальных переменных, необходимых для всего приложения. Класс выглядит примерно так:Java: Назначение нестатической переменной для статической переменной

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 статично) мой вопрос: есть ли какой-либо путь вокруг этого? I.e, любой способ присвоить значение, установленное в "Props", "IPZip" static var?

Примечание: Цель использования этого метода является то, что я могу использовать синтаксис GlobalVar.IPZip в любом месте приложения ..

+0

Это, скорее всего, проблема с дизайном. Вы изучали использование других методов сохранения глобальной переменной? Не могли бы вы превратить свой класс «GlobalVar» в POJO с помощью геттеров и сеттеров? Возможно, используйте шаблон Singleton, если вы беспокоитесь о том, что используются несколько экземпляров класса. – CubeJockey

ответ

0

Вы создаете экземпляр MyProps, то называя его нестатический getIPZip метод. Вы не можете назначить результат нестатического метода статической переменной.

Вместо этого вам нужно будет преобразовать метод getIPZip быть статическим методом вашего MyProps класса, то можно назначить свой результат YOR IPZip переменных, как это.

public static String IPZip = MyProps.getIPZip("IPZip"); 

Тогда вы могли бы получить доступ к IPZip в любом месте с помощью GlobalVar.IPZip.

Однако, если вы сделаете статический метод getIPZip, добавление другой переменной в класс GlobalVar несколько не нужно, так как вы можете просто позвонить MyProps.getIPZip("IPZip"); в любом месте вашего кода.

Другой вариант - переместить метод getIPZip в ваш класс GlobalVar и сделать его статическим методом там, тогда вы можете позвонить GlobalVar.getIPZip("IPZip");.

+0

Вы попробовали? Я получаю точно такую ​​же ошибку. –

0

Возможно, я не совсем понимаю, но почему вы не можете это сделать?

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

Вместо того, чтобы назначать что-то позже?

Смежные вопросы