Имам локална променлива във външния си метод, която искам да променя от анонимен вътрешен клас. Как мога да го направя?
Опитах решението, използвайки масив от един елемент, описан тук
public class outerClass{
static public void outerMethod(Interface interface) {
final String[] variable = new String[1];
new Thread(new Runnable() {
@Override
public void run() {
variable[0] = "Hello";
Log.i("test", variable[0]); // Works, prints "Hello"
}
}).start();
Log.i("test", variable[0]); // Doesn't work, null string
}
}
и решението с помощта на държач, описано тук
public class outerClass{
static public void outerMethod(Interface interface) {
final Holder<String> variable = new Holder<String>;
new Thread(new Runnable() {
@Override
public void run() {
variable.held = "Hello";
Log.i("test", variable.held); // Works, prints "Hello"
}
}).start();
Log.i("test", variable.held); // Doesn't work, null string
}
}
class Holder<String> {
public String held;
}
но и двете не работят в моя случай по някаква причина.
Може да е уместно, но различното е, че моят външен метод е статичен. Тук също опростих кода си, оригиналният код беше за анонимен клас за обратно извикване от библиотеката Retrofit на Android.
Thread
, за да управлявате свояRunnable
? - person rgettman   schedule 06.02.2016