Область видимости JAVA

268
22 сентября 2018, 23:00

Как перебросить переменную с method1() в method2()?

Переменная не видна, так как она объявлена внутри метода, и на нее не существует жесткой ссылки. Иными словами, после выполнения метода переменная действительно стирается из памяти, что можно придумать?

Может есть вариант записать данные в временный файлик?

 public class Test1
        {
         ...
            @JavascriptInterface
            public String method1()
            {
                 String title = 1;
                 return title;
            }
         }
        public class Test2
        {
            public void method2()
            {
                 title //ошибка компиляции - переменная title не видна из этого блока кода
            }
        }
Answer 1

Спасибо всем за внимание, вот ответ

 public class Test1
        {
         ...
            @JavascriptInterface
            public String method1()
            {
                 String title = 1;
                 SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
                 SharedPreferences.Editor editor = pref.edit();
                 editor.putString("key_name", title);  // сохранение переменной
                 return title;
            }
         }
        public class Test2
        {
            public void method2()
            {
                 SharedPreferences pref = mContext.getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
                 String title = pref.getString("key_name", null);
            }
        }
Answer 2

Фигурные скобки задают область видения переменных. Это все к вопросу о стеке. Строчка

{ String title = "1" } // именно с кавычками, в вашем примере в String почему-то передается int

создаст ссылку на объект title в стеке. Объект будет доступен во всех вложенных уровнях { }, но как только закроется фигурная скобка, внутри которой создавался объект, он перестает быть доступен извне. Решить вопрос можно, например, создав объект как поле класса, то есть

public class Test1 {
       String title = "1";
       ...
       public String method1() {
       ... // Объект title будет здесь доступен
       }
       public class Test2 {
              public String method2() {
              ... // И здесь тоже
              }
       }
} // А вот здесь уже нет.
READ ALSO
Использование Xerces-2.12

Использование Xerces-2.12

Java 8 из коробки поддерживает xerces-j 27

218
Указание конкретного ip-адреса сокетам в Java.net

Указание конкретного ip-адреса сокетам в Java.net

Требуется создать простейшее клиент-серверное приложениеИспользую библиотеку java

301
Проблемы с созданием апплета на java

Проблемы с созданием апплета на java

пытаюсь учить java, и в освоении апплетов я зашёл в тупикУчу по книге и там в примере даётся такой код, но меня смущает HTML код(Т

225
Java поиск строк в файле по ключевому слову

Java поиск строк в файле по ключевому слову

Есть лог файл в текстовом формате, весом 4gbСтруктура файла - это N строк весом примерно 200 байт

215