gpt4 book ai didi

java - 如何将变量传递给新的 Runnable 声明?

转载 作者:IT老高 更新时间:2023-10-28 20:30:49 27 4
gpt4 key购买 nike

我有以下:

Runnable done = new Runnable()
{
public void run()
{
System.out.println("Hello");
}
};

然后在我的 Android Activity 中,我会调用类似:

runOnUIThread(done);

然后我调用我。但是,我希望 "Hello" 不被硬编码,所以我可以将它传递进去。否则我必须为我想要打印的每个字符串都有这些声明之一。

(这实际上是一个 android 问题,但将其精简为基本 Java,因此更容易回答)

谢谢

最佳答案

在 Java 中(我相信在 Android 中也是如此),您可以使用匿名内部类,就像 Bart van Heukelom 所建议的那样。该方案的优点是代码少,可以访问外部类的字段和方法。

但它有两个缺点:

  • 变量“hello”必须是final,

  • 匿名类有一个对外部类实例的内部引用——这意味着当外部类有资格进行垃圾回收时,它会被保留。@See:Effective Java [Joshua Bloch],第 22 条:支持静态成员类而不是非静态成员类

在我看来,以这种方式对类实例进行参数化是不好的做法。

所以我相信,只要你不需要访问外部类的方法和字段,最好为这个任务编写一个特定的类,并使其成为静态成员类。

class Demo {
...

private static class MyRunnable implements Runnable {
private final String message;

MyRunnable(final String message) {
this.message = message;
}

public void run() {
System.out.println(message);
}
}

public void startThread() {
MyRunnable myRunnable = new MyRunnable("Hello");

runOnUIThread(myRunnable);
}
...
}

关于java - 如何将变量传递给新的 Runnable 声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4297261/

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