- Использование глобальных переменных/констант в Java
- Вступление
- Что такое глобальная переменная?
- Почему Java не использует Глобальные переменные?
- Как эмулировать глобальную переменную в Java?
- Git Essentials
- Вывод
- Глобальная переменная Android
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Ответ 12
- Ответ 13
- Ответ 14
- Android глобальная переменная
- Глобальная переменная андроид
- 14 ответов
Использование глобальных переменных/констант в Java
В этом уроке мы рассмотрели, что такое глобальные переменные, и примеры того, как вы можете эмулировать глобальные переменные и создавать константы в приложениях Java.
Автор: Guest Contributor
Дата записи
Вступление
Объектно-ориентированная структура кода Java может усложнить привязку переменных в нескольких местах. Иногда также может быть трудно решить, к какому классу должна относиться данная переменная, особенно если это широко используемое значение, такое как соединитель базы данных или математическая константа.
Во многих языках, когда мы сталкиваемся с подобной проблемой, мы можем объявить глобальную переменную. Хотя, к сожалению, Java технически не позволяет создавать переменные в глобальной области.
В этой статье мы рассмотрим эмуляцию и использование глобальных переменных в Java .
Что такое глобальная переменная?
Глобальная переменная-это переменная, доступ к которой можно получить из любой области. Многие языки программирования имеют специальный синтаксис для объявления глобальной переменной, например, Python позволяет нам использовать ключевое слово global :
C создает глобальные значения, просто объявляя переменную вне функции.
Независимо от синтаксиса создания глобальной переменной, они работают более или менее одинаково. Они позволяют вам получать доступ и изменять значение из любого другого класса или функции. Это может вызвать проблемы, если вы попытаетесь повторно использовать имя в другой области. Например:
В зависимости от языка, как правило, это обрабатывается одним из трех способов:
- Выдайте ошибку для объявления переменной, которая уже существует.
- Предположим, что инструкция print ссылается на локальную переменную.
- Предположим, что инструкция print ссылается на локальную переменную , если только для ссылки на глобальную не используется специальный синтаксис .
Третий метод заключается в том, как Java обрабатывает переменные экземпляра, когда параметр метода использует одно и то же имя. Представьте класс с переменной, объявленной как частный номер int . Чтобы изменить значение number позже, вы можете создать функцию:
Ключевое слово this показывает, что вам нужно число из класса, а не из параметров метода.
Почему Java не использует Глобальные переменные?
Короткий ответ на этот вопрос: преднамеренный дизайн. Java была создана как чисто объектно-ориентированный язык программирования, поэтому все, что вы создаете, заключено в класс.
Будучи чисто объектно-ориентированными, разработчикам рекомендуется объединять связанные переменные и функции, делая программу в целом более организованной. Это также может помочь определить назначение плохо документированной переменной. Например:
Без знания того, что эти переменные были частью Координатной сетки класса, идентифицировать их было бы практически невозможно. Исходя из контекста имени класса, мы можем сделать вывод, что это горизонтальное и вертикальное положение данной точки на сетке.
Теперь представьте, что вы работаете в полностью удаленной команде с участниками по всему миру. Вы и коллега на другом континенте работаете над одним и тем же файлом, когда вы оба сталкиваетесь с этим:
Вы делаете предположение, что переменная представляет номер версии. Ваш коллега думает, что это может быть как-то связано с вертикальной осью. Вы оба вносите изменения в различные функции, основываясь на своих предположениях, изменяя значение и ссылаясь на него по своему усмотрению.
Это тип ситуации, которой Java пытается избежать, не имея глобальных переменных. Использование глобальных переменных в большом проекте может привести к непреднамеренному и неожиданному поведению, поскольку переменные объявляются и изменяются в разных разделах кода.
Как эмулировать глобальную переменную в Java?
Хотя у использования глобальных переменных есть некоторые недостатки, иногда вам может потребоваться доступ к переменной во многих местах, но вы можете почувствовать, что это не гарантирует создание выделенного класса-оболочки.
Например, вы можете захотеть ссылаться на подключение к базе данных в нескольких классах, но не объявили класс DatabaseConnection для обработки всех функций базы данных. Вы также можете просто предпочесть использовать встроенные методы из библиотеки баз данных по вашему выбору без оболочки для обработки транзакций.
Обычно вы можете создать Константы или Ссылку класс, в котором хранятся различные “глобальные” значения, если они обычно используются в других частях приложения. Одна переменная не обязательно гарантирует наличие целого класса, поэтому вы можете объединить многие из них в один Ссылка или Константы класс:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Затем к этим переменным можно получить доступ в другом месте, обратившись к классу:
Наличие класса Reference позволяет легко узнать, где искать комментарии, объясняющие назначение переменной. Если бы приведенные выше переменные были созданы как истинные глобальные переменные, вполне вероятно, что они были бы созданы в разных файлах, что затруднило бы поиск предполагаемой цели автора.
Лучшим способом использования класса Reference было бы рассматривать все переменные как частные и использовать методы получения для управления всем доступом к значениям. Также разумно использовать константы вместо переменных для данных, которые не должны изменяться во время работы программы. Например:
В этом примере URL-адрес базы данных и подключение к базе данных не могут быть изменены нигде в коде, но на подключение к базе данных можно ссылаться по мере необходимости для транзакций.
Хотя это не так чисто синтаксически, как определение глобальной переменной, это может обеспечить тот же уровень свободы.
Другим распространенным использованием было бы определение некоторых констант в приложении, имеющем неизменяемые значения, которые вы часто используете. Например, если вы тренируете нейронную сеть или запускаете генетические алгоритмы, у вас повсюду будут использоваться различные значения:
Затем вы получите доступ к ним через их общедоступный класс, например:
Вывод
Глобальные переменные часто рассматриваются как спорная тема, и многие разработчики говорят, что их никогда не следует использовать. Эти разработчики обычно утверждают, что глобальные переменные усложняют обслуживание кода. Однако есть некоторые случаи, когда глобальные переменные полезны, если они хорошо организованы и четко определены.
В конечном счете, решение об их использовании ложится на вас или старшего члена команды разработчиков.
В этой статье мы рассмотрели как эмулировать глобальные переменные в Java .
Источник
Глобальная переменная Android
Как создать глобальную переменную, сохраняйте значения в течение жизненного цикла приложения независимо от того, какая активность работает.
ОТВЕТЫ
Ответ 1
Вы можете расширить базовый класс android.app.Application и добавить переменные-члены следующим образом:
В манифесте Android вы должны объявить класс, реализующий android.app.Application(добавьте атрибут android:name=».MyApplication» к существующему тегу приложения):
Затем в ваших действиях вы можете получить и установить переменную следующим образом:
Ответ 2
Вы можете использовать Singleton Pattern следующим образом:
В вашем приложении вы можете получить доступ к своему синглтону таким образом:
Ответ 3
Эта глобальная переменная работает для моего проекта:
Ответ 4
Вы можете использовать настройки приложения. Они доступны из любой деятельности или части кода, пока вы передаете объект Context, и они являются частными для приложения, которое их использует, поэтому вам не нужно беспокоиться о том, чтобы подвергать определенные значения приложения, если вы не имеете дело с маршрутизируемыми устройства. Тем не менее, вы можете использовать схемы хэширования или шифрования для сохранения значений. Кроме того, эти настройки сохраняются из приложения, запускаемого в следующий. Здесь — некоторые примеры кода, которые вы можете посмотреть.
Ответ 5
Существует несколько разных способов достижения желаемого.
1.) Расширьте класс приложения и создайте экземпляр своего контроллера и объектов модели.
Затем вы можете в любой момент вызывать свой синглтон из своего пользовательского объекта приложения:
2.) Вы можете заставить ваш контроллер просто создать одиночный экземпляр самого себя:
Затем вы можете просто вызвать метод create из любого Activity или Fragment, и он создаст новый контроллер, если он еще не существует, иначе он вернет существующий контроллер.
3.) Наконец, на Square создается гладкая структура, которая обеспечивает вам инъекцию зависимостей в Android. Он называется Dagger. Я не буду рассказывать, как использовать его здесь, но он очень скользкий, если вам это нужно.
Надеюсь, я дал достаточно подробностей о том, как вы можете делать то, на что вы надеетесь.
Ответ 6
Ответ 7
Создайте общий класс данных:
SharedData.java
Объявлено/инициализировать экземпляр класса глобально в тех классах, где вы хотите установить/получить данные (используя этот код до метода onCreate() ): —
Ответ 8
Вы можете создать Global Class следующим образом:
Затем определите его в манифесте:
Теперь вы можете установить значения для глобальной переменной следующим образом:
Вы можете получить эти значения следующим образом:
Полный пример из этого блога Глобальные переменные
Ответ 9
Я проверил аналогичный ответ, но приведенные здесь не соответствуют моим потребностям. Я нахожу то, что, с моей точки зрения, является тем, что вы ищете. Единственная возможная черная точка — это вопрос безопасности (или, может быть, нет), поскольку я не знаю о безопасности.
Я предлагаю использовать интерфейс (не нужно использовать класс с конструктором и т.д.), так как вам нужно только создать что-то вроде:
Затем вы можете получить доступ во всех своих классах, используя следующее:
Ответ 10
Ответ 11
Если возможно, вы должны объявить переменные, которые вам нужно сохранить, которые не были очищены сборщиком мусора или выгрузить ОС в файле .so Чтобы сделать это, вы должны закодировать C/С++ и скомпилировать файл .so lib и загрузить его в свой MainActivity.
Ответ 12
Технически это не отвечает на вопрос, но я бы рекомендовал использовать базу данных Room вместо любой глобальной переменной. https://developer.android.com/topic/libraries/architecture/room.html Даже если вам «нужно» хранить глобальную переменную, и это не имеет большого значения, а что нет, но использование базы данных «Комнаты» — это самый элегантный, родной и хорошо поддерживаемый способ сохранения ценностей в жизненном цикле деятельности. Это поможет предотвратить многие проблемы, особенно целостность данных. Я понимаю, что база данных и глобальная переменная различны, но, пожалуйста, используйте Room для поддержания кода, стабильности приложения и целостности данных.
Ответ 13
Используйте SharedPreferences для хранения и извлечения глобальных переменных.
Ответ 14
Эти переменные, которые вы хотите получить в качестве глобальной переменной, можете объявить их как статические переменные. И теперь вы можете получить доступ к этим переменным с помощью
Источник
Android глобальная переменная
Как создать глобальную переменную, чтобы сохранить значения в течение всего жизненного цикла приложения, независимо от того, какое действие выполняется ..
Вы можете расширить базовый класс Android.app.Application и добавить переменные-члены следующим образом:
В своем манифесте Android вы должны объявить класс, реализующий Android.app.Application (добавьте атрибут Android:name=».MyApplication» в существующий тег приложения):
Затем в своей деятельности вы можете получить и установить переменную следующим образом:
Вы можете использовать Singleton Pattern как это:
В вашем приложении вы можете получить доступ к вашему синглтону следующим образом:
Эта глобальная переменная работает для моего проекта:
Вы можете использовать настройки приложения. Они доступны из любого действия или фрагмента кода до тех пор, пока вы передаете объект Context, и они являются частными для приложения, которое их использует, поэтому вам не нужно беспокоиться о предоставлении определенных значений приложения, если только вы не имеете дело с маршрутизируемым устройства. Тем не менее, вы можете использовать схемы хеширования или шифрования для сохранения значений. Также эти настройки сохраняются от запуска приложения к следующему. Здесь это примеры кода, которые вы можете посмотреть.
Есть несколько способов добиться того, о чем вы просите.
1.) Расширьте класс приложения и создайте там экземпляр вашего контроллера и объектов модели.
Затем вы можете в любое время вызвать свой синглтон из пользовательского объекта Application:
2.) Вы можете заставить свой контроллер просто создавать отдельный экземпляр себя:
Затем вы можете просто вызвать метод create из любого действия или фрагмента, и он создаст новый контроллер, если он еще не существует, в противном случае он вернет ранее существовавший контроллер.
3.) Наконец, в Square создана удобная инфраструктура, которая обеспечивает внедрение зависимостей в Android. Это называется Dagger . Я не буду вдаваться в подробности, как использовать это здесь, но это очень удобно, если вам нужны такие вещи.
Надеюсь, я достаточно подробно рассказал о том, как вы можете делать то, на что надеетесь.
Источник
Глобальная переменная андроид
Как создать глобальную переменную keep remain значения по всему жизненному циклу приложения независимо от того, какое действие выполняется..
14 ответов
вы можете расширить базу android.app.Application class и добавить переменные-члены, например:
в вашем манифесте android вы должны объявить класс, реализующий android.приложение.Приложение (добавить android:name=».MyApplication» атрибут существующего тега приложения):
затем в вашей деятельности вы можете получить и установить переменную так:
можно использовать Singleton Pattern такой:
в вашем приложении вы можете получить доступ к синглтону таким образом:
эта глобальная переменная работает для моего проекта:
вы можете использовать настройки приложения. Они доступны из любого действия или фрагмента кода, пока вы передаете объект контекста, и они являются частными для приложения, которое их использует, поэтому вам не нужно беспокоиться о предоставлении конкретных значений приложения, если вы не имеете дело с маршрутизируемыми устройствами. Тем не менее, вы можете использовать схемы хэширования или шифрования для сохранения значений. Кроме того, эти настройки хранятся от запуска приложения к следующему. здесь некоторые примеры кода на это можно посмотреть.
есть несколько разных способов достичь того, о чем вы просите.
1.) Расширьте класс приложения и создайте там экземпляр вашего контроллера и объектов модели.
затем вы можете вызвать свой синглтон из пользовательского объекта приложения в любое время:
2.) Вы можете иметь контроллер просто создать синглтонный экземпляр самого себя:
затем вы можете просто вызвать метод из любого действия или фрагмента, и он создаст новый контроллер, если он еще не существует, иначе он вернет существующий контроллер.
3.) Наконец, есть гладкая структура, созданная в Square, которая обеспечивает вам инъекцию зависимостей в Android. Она называется Кинжал. Я не буду вдаваться в то, как использовать его здесь, но он очень скользкий, если вам нужны такие вещи.
Я надеюсь, что я дал достаточно подробностей в отношении того, как вы можете делать то, на что надеетесь.
создайте общий класс данных:
SharedData.java
объявлено / инициализировать экземпляр класса глобально в тех классах, где вы хотите установить / получить данные (используя этот код до onCreate() способ):-
Я проверил аналогичный ответ, но приведенные здесь не соответствуют моим потребностям. Я нахожу то, что, с моей точки зрения, является тем, что вы ищете. Единственная возможная черная точка — это вопрос безопасности (или, может быть, нет), так как я не знаю о безопасности.
Я предлагаю использовать интерфейс (нет необходимости использовать класс с конструктором и так далее. ), так как вам нужно только создать что-то вроде :
затем вы можете получить доступ везде в своих классах, используя следующий:
вы можете создать Global Class такой:
затем определите его в манифесте:
теперь вы можете установить значения глобальной переменной, как это:
вы можете получить эти значения, как это:
пожалуйста, найти полный пример из этого блога Глобальные Переменные
используйте SharedPreferences для хранения и извлечения глобальных переменных.
Если возможно, вы должны объявить переменные, которые вам нужно сохранить в живых, которые не были очищены сборщиком мусора или выгрузить ОС в файле .так что . Чтобы сделать это, вы должны закодировать C / C++ и скомпилировать.Итак, lib-файл и загрузите его в свою MainActivity.
технически это не отвечает на вопрос, но я бы рекомендовал использовать базу данных Room вместо любой глобальной переменной. https://developer.android.com/topic/libraries/architecture/room.html Даже если вам «только» нужно хранить глобальную переменную, и это не имеет большого значения, а что нет, но использование базы данных комнаты-самый элегантный, родной и хорошо поддерживаемый способ хранения значений по всему жизненному циклу деятельности. Это поможет предотвратить многие проблемы, особенно целостность данных. Я понимаю, что база данных и глобальная переменная отличаются, но, пожалуйста, используйте комнату для обслуживания кода, стабильности приложений и целостности данных.
те переменные, к которым вы хотите получить доступ как к глобальной переменной, вы можете объявить их как статические переменные. И теперь вы можете получить доступ к этим переменным с помощью
Источник