注:この質問は主に理論的なものです。私はこれ以来、を使ってあきらめました。は、自分のコードを過度に複雑にしてしまい、反パターンのような臭いを感じました。しかし、私はそれが理論的には面白いと思っており、そのコミュニティの助けが大好きです。Javaの引数は、別のオブジェクトに含まれるクラスによって型にバインドできますか?
私は画像操作のために世紀の回りに書かれたコードを改造しています。多数の冗長性を持つ単一のクラスをいくつかのBiFunctionフィルタに分割することから始めます。それらはそれぞれBufferedImageとIntensity(Double)を受け取り、新しいBufferedImageを返します。もちろん、これらの画像フィルタの多くは、効果半径や強度などの追加の懸念があります。効率的に連鎖させる場合は、これらを「制服」(または準-constants)を使用します。
私の現在の方法は、ImageFilterクラスをさらに拡張し、ユニフォームをBeanスタイルのプロパティとして設定するだけです。私が最初にやって考えると、インタフェースで開催されたジェネリッククラスにそれらを制約し、の線に沿って何か持っていた。そこに
public void addProperty(Uniform<T> property, T type)
、Tは制服によって完全に指定されています。
元のクラスは、これらの制服をすべてHashMapのString名で保持していましたが、それは多くの悪い習慣の始まりです。スペルミスによりコードが失火すると、無責任なコードになります。私は成長したように、ただそこにシングルトンを使用することを好むだろう。
したがって、要約すると、Javaでは、パラメータ型を別のパラメータのジェネリックにバインドできますか?もしそうなら、どうですか?もしそうでなければ、将来誰かがJava Genericsを拡張する計画を知っていますか?
ありがとうございました!
がどのようにハードあなたはそれを試してみると、私たちにコンパイラに何を伝えるためにあるかもしれないと思います参照してください
サンプルの使用であります言った? –
@ HankD有効なコードではないことがすでに分かっていると思います。コンパイルされません。文字通りそのコードを入力する場合、コンパイラはTを型に解決できないことを拒否します。問題は、これが一般的な真実か、問題を解決する構文またはパターンがあるかどうかです。 –
まだ何を意味するのかわからない、なぜ 'public void addProperty(Uniform プロパティ、Tタイプ)'はあなたが望むものではありませんか? –
HuStmpHrrr