19

標準Runnableインターフェースには、パラメーター化されていないrun()メソッドのみがあります。ジェネリック型の結果を返すメソッドとのCallable<V>インターフェースもあります。call()次のようなジェネリックパラメータを渡す必要があります。

interface MyRunnable<E> {
  public abstract void run(E reference);
}
この目的のための標準的なインターフェースはありますか、それとも私はその基本的なインターフェースを自分で宣言する必要がありますか?

4

5 に答える 5

14

通常、一般的な入力パラメータをサポートするクラスとして、Runnableまたは実装します。Callable例えば

public class MyRunnable<T> implements Runnable {
  private final T t;

  public MyRunnable(T t) {
    this.t = t;
  }

  public void run() {
    // Reference t.
  }
}
于 2009-11-02T08:16:30.143 に答える
11

Java 8には、java.util.function.Consumer<T>デフォルト以外の単一のメソッドを使用したインターフェースが含まれていますvoid accept(T t)

そのパッケージには他にも多くの関連するインターフェースがあります。

于 2016-01-30T21:02:37.577 に答える
9

Googleコレクショングアバcom.google.common.base.Function<F, T>からもあります。

出力タイプを?またはに設定するVoidと(そして常にそれを返すように) 、入力パラメーターnullを使用する代わりにそれを使用できます。Runnable

Functions.composeこれには、入力値を変換したりIterables.transform、コレクションのすべての要素に適用したりするために使用できるという利点があります。

于 2009-11-02T11:22:38.750 に答える
4

一般に、パラメーターをメソッドに渡したい場合は、パラメーターを受け取るコンストラクターでrun()サブクラス化します。Runnable

たとえば、次のようにします。

// code
Runnable r = new YourRunnable();
r.run(someParam);
//more code

これを行う必要があります:

// code
Runnable r = new YourRunnable(someParam);
r.run();
//more code

以下のように実装YourRunnableします。

public class YourRunnable implements Runnable {
    Some param;
    public YourRunnable(Some param){
        this.param = param;
    }
    public void run(){
        // do something with param
    }
}
于 2009-11-02T08:16:30.833 に答える
0

元の質問で行ったようにインターフェイスを定義することをお勧めします。さらに、のような意味のないインターフェースではなく、本来の目的に固有のインターフェースを作成することで、弱い型付けを避けますRunnable

于 2009-11-02T10:05:41.867 に答える