2010-11-27 8 views
0

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

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

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

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

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

спасибо.

+5

Весь подход сломан. Вам нужно изучить ООП, а затем повторить проблему, которую вы пытаетесь решить. – cherouvim 2010-11-27 22:19:38

+0

[Почему так много людей пишут JAVA вместо Java?] (Http://programmers.stackexchange.com/q/2271/241) – 2010-11-27 22:29:16

+1

это домашнее задание? Если это так, отметьте его как таковой. – hvgotcodes 2010-11-27 22:35:04

ответ

4

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

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

Object value; 

затем экземпляры из class1 и class2 будут иметь отдельные ссылки на отдельные экземпляры «ценности».

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

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

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

class SharedData { 
    public static Object shared1; 
} 

, а затем в ваших и class2 класса 1. случаях вы можете получить доступ к

SharedData.shared1 

либо для установки или получить.

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

0

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

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

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