gpt4 book ai didi

java - 如何从匿名内部类更改外部变量?

转载 作者:行者123 更新时间:2023-11-29 04:51:38 24 4
gpt4 key购买 nike

我的外部方法中有一个局部变量,我想从匿名内部类更改它。我该怎么做?

我尝试使用描述为 here 的单元素数组来解决这个问题

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
}
}

以及使用描述的支架的解决方案 here

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;
}

但出于某种原因,两者都不适用于我的情况。

这可能是相关的,但不同的是我的外部方法是静态的。我还在这里简化了我的代码,原始代码是针对 Android 上 Retrofit 库中的匿名回调类。

最佳答案

您正在创建一个 Runnable 类,但它实际上从未运行过。您需要通过调用它的 start() 方法来“启动”它。

但您还必须记住,当您在 outerMethod() 中启动它时,它可能不会在调用 Log 方法之前运行(因为它将在单独的线程中运行)以及代码的顺序不再保证调用。

关于java - 如何从匿名内部类更改外部变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35235683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com