我有以下内容:
Runnable done = new Runnable()
{
public void run()
{
System.out.println("Hello");
}
};
然后在我的Android活动中,我会称之为:
runOnUIThread(done);
然后我打电话给我。但是,我希望"Hello"
不被硬编码,所以我可以传入它。否则我将不得不为我想要打印的每个字符串都有一个这样的声明。
(这实际上是一个安卓问题,但它缩减为基本的Java,因此更容易回答)
由于
答案 0 :(得分:48)
在Java中(我相信它在Android中也是如此),你可以使用一个匿名的内部类,就像Bart van Heukelom所建议的那样。 这个解决方案的优点是必须编写更少的代码,并且可以访问外部类的字段和方法。
但它有两个缺点:
变量“hello”必须是最终的,
匿名类具有对外部类实例的内部引用 - 这意味着外部类在有资格进行垃圾回收时将被保留。 @See:Effective Java [Joshua Bloch],Item 22:赞成非静态的静态成员类
以我的拙见,以这种方式参数化类实例是不好的做法。
所以我相信,只要您不需要访问外部类的方法和字段,最好为此任务编写一个特定的类,并使其成为 static 成员类。
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);
}
...
}
答案 1 :(得分:22)
final String hello = whereverItsComingFrom;
Runnable done = new Runnable()
{
public void run()
{
System.out.println(hello);
}
};