0

次のインターフェイスをエミュレートしたいと思います。

interface MultiSideEffectFunction<T> {
    void action(T first, T second);
}

(新しいインターフェースを導入する必要がなくなります)

これを行うための好ましいグアバアプローチはありますか?

注:私はそれをすることを考えました

Function<Pair<T>, Void>

しかし、新しいインターフェースの作成を望ましいものにする2つの問題があります。

  1. Pair<T>より適切なゲッター名を持つとよく似た、というクラスを定義する必要がありますMap.Entry<T, T>(2番目の質問として:このようなGuavaタイプはありますか?)。
  2. 返品タイプは常に苦痛です-本物の署名Voidを持っている方が良いでしょう。void
4

2 に答える 2

5

ここでグアバの貢献者。

推奨されるGuavaのアプローチは、独自のインターフェースを作成することです。

特に、;は使用しないでください。関数に副作用がない場合にのみ使用してください。FunctionFunction

Pairグアバは意図的にタイプを欠いています。ペアが必要なときはいつでも、まったく情報のない「最初の」と「2番目の」ではなく、2つの値に有用な名前を付ける独自のクラスを作成することをお勧めします。(典型的な例はGPS座標の場合です。タイトルLatLongが付けられたクラスは、よりもはるかに有益ですPair<Double, Double>。)

于 2012-06-28T16:39:18.473 に答える
3

Guavaチームは、基本的な関数型イディオムのみを提供し、完全な関数型プログラミングAPIの再作成には関心がないという事実については骨を折っていません。そのためには、他のいくつかのAPIを見ることができます。そして、これらのAPIのいくつかは、副作用が純粋な関数型プログラミングモデルとは正反対であるにもかかわらず、「関数型」オブジェクトを誘発する副作用をサポートします(ラムダの後でも、Javaが真の関数型言語になることは決してないので、これは問題ありません)。 。

しかしとにかく、APIの例として、JediCommandはまさにあなたが探しているもののためのクラスを提供します。Functional Javaでは、それらはクラスを提供しますが、これEffectはほぼ同じことだと思います。

ところで、あなたの例で<T>は、入力タイプのそれぞれが互いに異なる可能性があるように、単にではなく複数のタイプ変数を提供することをお勧めします。

明白なタイプミスのために編集されただけです)

于 2012-06-28T18:01:27.043 に答える