パラメーターを受け入れるには、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
}
(内部クラスRoadRunner
の場合、つまり非静的なネストされたクラスの場合、外側の型のインスタンス メンバーにもアクセスできます。)
匿名の Runnable と「貧乏人の閉鎖」を使用すると、次のようになります。
void doItAnon () {
final String acmeWidget = "TNT";
Runnable r = new Runnable () {
public void run () {
evadeCleverPlan(acmeWidget);
}
};
// do something with runnable
}
(匿名クラスは内部クラスであるため、この匿名 Runnableは、包含型のインスタンス メンバーにもアクセスできます。)