4

次の変数を渡したいと仮定します

String foo = "hello world";

次のスレッドへの引数として

new Thread(new Runnable() {

    @Override
    public void run() {
        // SOME CODE HERE REQUIRES VARIABLE
    }
}).start();

誰かがこれを行う方法を説明できますか?

ありがとう。

4

5 に答える 5

4

サブクラススレッド:

public class MyThread extends Thread {

   private String arg;

   public MyThread(String arg) {
      this.arg = arg;
   }

   @Override
   public void run() {
        // Use your variable
   }
}
于 2013-03-26T16:14:29.130 に答える
3

誰かがこれを行う方法を説明できますか?

したがって、問題にはより多くの解決策がありますが、最初からうまくいきます。独自のサブクラスを作成し、そのコンストラクターThreadを介してパラメーターを渡すことをお勧めします。

public class MyThread extends Thread {

    public MyThread(String value) {

    }
}

Runnableまたは、インターフェースを使用することもできます。

public class MyThread implements Runnable { ... }

アップデート:

または、@ ericksonが指摘したように、コードをメソッドの本体にラップできますが、別のメソッドで定義された内部クラス内の非最終変数を参照できないため、メソッドの引数として最終変数を渡す必要があります。

于 2013-03-26T16:13:14.360 に答える
3

として宣言されているローカル変数はfinal、スレッドに表示されます。

void doSomething(final String foo) {
  new Thread(new Runnable() {
      @Override
      public void run() {
        // SOME CODE HERE REQUIRES VARIABLE
        System.out.println(foo);
      }
  }).start();
}
于 2013-03-26T16:15:04.827 に答える
0

Javaでは匿名クラスを使用して引数を渡すことはできません。あなたができることは、別のクラスを作成し、それをインスタンス変数として渡すことです

于 2013-03-26T16:15:45.857 に答える
0
String foo = "hello world";
final String parameter = foo;
new Thread(new Runnable() {

    @Override
    public void run() {
         //Use parameter
    }
}).start();
于 2013-03-26T16:15:53.150 に答える