Страницы

Поиск по вопросам

среда, 19 декабря 2018 г.

Обращение к объекту из другого класса

Есть 3 класса внутри одного пакета:
Осуществляет посылку запроса на авторизацию; Получает ответ; Работает с ответом.
Проблема в том, что не понимаю, как получить ссылку на объект, который создается в первом классе из 3-его.
Class1.java - Запрос авторизации UserData userData;
public void calcLogin(){ ht.call(SOAP_ACTION + methodname, envelope, header); SoapObject resultsString = (SoapObject)envelope.getResponse(); userData.setDataStore("ID", resultsString.getProperty(0).toString()) }
Я хочу получить результат выполнения действия в 3-ем классе.
class3.java
class UserData { static Map dataStore = new HashMap(); } public void setDataStore(String a1, String a2){ dataStore.put(a1,a2); }
Но я не вижу такого объекта. Получается, что его нет в памяти. Подскажите, куда копать и на что обратить внимание.


Ответ

Переменная не будет видна, если она объявлена внутри метода, так как на нее не существует жесткой ссылки. Иными словами, после выполнения метода переменная действительно стирается из памяти (ну, с учетом особенностей работы сборщика мусора).
Чтобы увидеть переменную, необязательно объявлять ее статичной, достаточно в самом начале класса, в блоке описания переменных, объявить ее как protected (видимость внутри пакета) или public (общая видимость).
Вроде того:
class Class1{ protected UserData ud1; protected static UserData ud2;
public void someMethod(){ UserData ud3; } }
Здесь переменная ud1 будет видна всем классам внутри пакета через экземпляр класса Class1 (например, new Class1().ud1) - и, соответственно, будет разная для каждого экземпляра класса.
Статичная переменная ud2 - это переменная, одинаковая для всех экземпляров класса. Будет доступна для всех классов внутри пакета через Class1.ud2 . Вряд ли это то, что вам нужно.
Ну а третья переменная ud3 отойдет сборщику мусора после выполнения метода.

Комментариев нет:

Отправить комментарий