创建使用参数的runnable

时间:2013-05-06 23:41:06

标签: java constructor instance declaration runnable

我正在做一些Android编程,我想创建一个接受意图的runnable。我知道创建runnable的一般方法是:

Runnable R1 = new Runnable(){ 代码的 };

我想要的是我的runnable接受意图作为参数或输入。然后,runnable使用其他东西的意图。我想我会看起来像这样:

Runnable R1 = new Runnable(Intent i1){ 代码的 };

我已经尝试了这个以及它的变体并且无法将其编译。我该怎么做?

2 个答案:

答案 0 :(得分:2)

要接受参数,必须创建一个符合Runnable的新类,以便可以将参数传递给构造函数(并在其中有用)。捕获状态的另一种方法是对匿名Runnable对象有用,是访问词法范围中的final变量。

使用新类和构造函数接受参数并存储值供以后使用:

class RoadRunner implements Runnable {
   String acmeWidget;
   public RoadRunner (string acmeWidget) {
     this.acmeWidget = acmeWidget;
   }
   public void run () {
     evadeCleverPlan(acmeWidget);
   }
}

void doIt () {
  Runnable r = new RoadRunner("Fast Rocket");
  // do something with runnable
}

(如果RoadRunnerinner class - 这是一个非静态嵌套类 - 它还可以访问封闭类型的实例成员。)

匿名的Runnable和一个可怜的男人关闭":

void doItAnon () {
  final String acmeWidget = "TNT";
  Runnable r = new Runnable () {
    public void run () {
      evadeCleverPlan(acmeWidget);
    }
  };
  // do something with runnable
}

(这个匿名的Runnable可以访问包含类型为anonymous classes的实例成员是内部类。)

答案 1 :(得分:0)

答案取决于您是否要在构造Runnable时传入Intent,或者在调用run时传递Intent。对于前一种情况,user2246674提供了一个很好的答案。

但是,如果您想要执行后者,则需要创建一个看起来类似于Runnable的界面,但不是。

public interface RunnableWithIntent {
  void run(Intent intent);
}

然后您将实例化“runnable”界面,如下所示:

RunnableWithIntent r = new RunnableWithIntent() {
  public void run(Intent intent) {
    // do something with the intent
  }
};

并称之为:

Intent intent = ...
r.run(intent);

请注意,此类不能在任何使用常规Runnable对象的地方使用。它只遵循类似的使用模式。