2010-11-24 1 views
4

JDKは、それらが含まれていないため、サードパーティのライブラリの膨大な数がアクションまたはのFuncインタフェースが含まれている、:Action/Funcクラスのデファクトスタンダードは何ですか?以下のようになり

public interface Action<T> { 
    void doSomething(T item); 
} 

public interface Func<TResult, TInput> { 
    TResult doSomething(TInput input); 
} 

デファクト、またはこのための最も一般的に使用される標準とは何ですか?

答えて

3

Runnable(void)またはCallable(値を返す)を使用できます。しかし、あなたが注意するように、パッケージはしばしば独自のパッケージを作成します。理由の一部は、runまたはcallよりも意味のある名前を付けることです。 JavaにはC#スタイルのデリゲートはなく、メソッドとインタフェースのインスタンスを暗黙的に変換する方法もありません。

上記のいずれのインターフェイスもパラメータを許可しないことに注意してください。必要な場合は、別の解決策が必要になります。

EDIT:以前はApache Functorを使用していましたが、いくつかのインターフェースを持っています(質問の場合はUnaryProcedureUnaryFunctionなど)。あなたはファンクタから何かを必要としない場合は特にしかし、私はまだ、あなた自身の作成を検討します(例えばalgorithmまたはadapter

+0

JDK7(または8?)では、これらの1つのメソッドのインターフェイス(およびメソッドの名前)が不要になります。その後、クロージャー(これもパラメーターを受け入れることができる)で置き換えることができます。 – Thilo

+0

申し訳ありませんが、私は十分に明確ではありませんでした - 私も一般的な引数を渡す必要があります。編集された質問を参照してください。 – ripper234

+0

@ripper、私はその署名の等価物を知らない。 –

1

私はあなたのAction<T>署名を(おそらく一因と一致する任意のインターフェイスを知りませんがそのような署名Action農産物副作用)のインスタンスは、Guavaが第2の署名と一致Functionインターフェースを有する義務、プラス怠惰なマッピングを行うためFunction Sを利用CollectionIterable関連ユーティリティのロット(グアバでtransform)と呼ばれます。また、本当に偉大な汎用Javaライブラリです。

+0

アクションは便利なことがあります。時には副作用が必要なだけで、何かを返すようにクライアントコードを強制したくないからです。 – ripper234

関連する問題