Как использовать статические глобальные переменные в JAVA - PullRequest
0 голосов
/ 28 ноября 2010

Я занимаюсь разработкой Java-программы, у меня есть 2 разных класса, которые должны обмениваться переменными друг с другом. Поэтому для этой цели я создал третий класс, который содержит эти общие переменные. По сути, первый класс имеет свой собственный флаг в этом третьем классе, а второй класс имеет свой собственный флаг в этом третьем классе. И я, конечно, добавляю «расширение третьего класса» к определению других классов.

Моя проблема в том, что когда я меняю значение основного метода первого класса 'flag in the first class', второй класс не может увидеть это изменение. А именно, он видит флаг с начальным значением.

Я думаю, что речь идет о статических переменных. Но я не знаю решения.

На самом деле у меня есть два сервера и несколько клиентов. Я пытаюсь смоделировать различные ситуации этих серверов для моего курса по распределенным системам. Каждый сервер имеет свою собственную таблицу данных, которая синхронизируется с другими. Под симуляцией я подразумеваю, что сервер может быть выключен или включен, и когда клиент пытается связаться с сервером, мне нужно направить его на другой сервер. Итак, между клиентами и серверами мне нужно отправлять информацию.

Как я могу делить переменные между двумя классами и легко изменять эти переменные любым классом без потери предыдущих модификаций?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 28 ноября 2010

РЕДАКТИРОВАТЬ - этот ответ для предыдущей версии вопроса, которая не включает в себя ничего о клиентах и ​​нескольких серверах. Этот ответ о совместном использовании данных между экземплярами классов.

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

  Object value;

затем экземпляры класса1 и класса2 будут иметь отдельные ссылки на отдельные экземпляры 'значения'.

Вам необходимо установить связь между классом и экземпляром объекта и тем, что означает расширение класса.

Обратите внимание, что это не очень хороший способ обмена информацией между объектами в реальной программе. Вы можете столкнуться со всеми видами проблем параллелизма. То же самое относится и к решению, в котором используется глобальный механизм, реализованный с использованием статических полей.

Чтобы сделать это со статическими полями, сделайте что-то вроде:

class SharedData {
    public static Object shared1;
}

и затем в ваших экземплярах class1 и class2 вы можете получить доступ к

SharedData.shared1

для набора или получения.

Но я бы не стал делать ничего подобного в профессиональном контексте.

0 голосов
/ 28 ноября 2010

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

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

Не могли бы вы описать, что вы 'пытаетесь достичь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...