Глобальная переменная дает мне ноль

1

Я хочу использовать глобальный variale в моем проекте, поэтому я просто возьму класс, в котором я могу установить и получить любую переменную dat легко.

как это::

public class Glob_variable {


        String Path = new String();

        /**********************************************/
        public void setPath(String Path) {
            this.Path = Path;
        }

        public String getPath() {
            return Path;
        }
        /**********************************************/


    }

Но когда я инициализирую его, я получаю нулевое исключение. Я инициализировал его, создав объект класса Glob_variable.

как::

Glob_variable g = new Glob_variable();
        g.setPath("asdasd");

и когда я вызываю во втором действии, я получаю нулевую переменную, когда трачу. Я звоню как:

Glob_variable g = new Glob_variable();
g.getPath();

Так вы можете сказать мне, в какой момент я совершил ошибку?

Теги:

3 ответа

1
Лучший ответ

Я думаю, что это из-за того, что вы вызываете метод get из другого вашего экземпляра класса Glob_variable.

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;
        }
        /**********************************************/

    }
  • 0
    может быть, эта проблема поднимается, потому что я вызываю метод get во втором упражнении с использованием Glob_variable g = new Glob_variable(); g.getPath(); так может быть, он создает новый экземпляр одновременно .... не так ли?
  • 0
    Да, точно....
Показать ещё 4 комментария
2

Glob_variable g = new Glob_variable(); будет создавать новый экземпляр, использовать static переменную или применять singletone

Singletone:

Glob_variable.getInstance().setPath("abc");
String path = Glob_variable.getInstance().getPath(");
  • 0
    Я использовал статическую переменную ранее, но я не получаю успех некоторое время
  • 0
    он всегда будет одинаковым, если он статический, используйте Singleton, если статический не предпочтителен
Показать ещё 3 комментария
1

Ну, здесь есть много ответов, но я думаю, что, как и я, вы также пришли из мира VB (или чего-то подобного) (я вижу, что все ваши переменные объявлены с верхним регистром первой буквы!).

Вы должны понимать, что, в отличие от VB, в Java нет глобального доступа "REAL". Когда вы используете "новый" оператор, создается новый экземпляр класса, и все значения переназначаются в соответствии с контрактом на конструктор. Таким образом, сбрасываем экземпляр переменной для хранения глобальных значений.

Второй вариант - это статические переменные, но я вижу, что у вас также есть трудности с их использованием. Здесь у меня есть сильное чувство, что временами вы используете свои статические переменные, прежде чем назначать им значение. Вы должны убедиться, что ваши сеттеры всегда вызываются перед вашими геттерами. Вы можете даже выполнить пользовательское исключение, например, следующее

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, пожалуйста, прочитайте ее.

Являются ли глобальные значения постоянными или должны быть установлены во время выполнения? Если они постоянны, я бы сказал, что вы создаете интерфейс с конечными переменными и используете их в своем коде.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню