問題をキーと値の間に制限を適用する方法:ジェネリック:地図に
public static interface FunctionObject<T> {
void process(T object);
}
私はそれが一般的な私はTを使用したいので、必要があります:私はクラスで定義された関数オブジェクトのインタフェースをしましたプロセス実装におけるメソッド。
その後、他の一般的なクラスで、私は私が値としてキーと関数オブジェクトとしてのクラスを持っている地図ました:
Map<Class<T>, FunctionObject<T>> map;
をしかし、私はまた、マップがOFスーパータイプのサブタイプのクラスや関数オブジェクトを受け入れるようにしたいです基本的な考え方は次のようにマップを使用できるようにすることです
Map<Class<? extends T>, FunctionObject<? super T>> map; //not what I need
:
//if T were Number, this should be legal
map.put(Class<Integer>, new FunctionObject<Integer>(){...});
map.put(Class<Float>, new FunctionObject<Number>(){...});
map.put(Class<Double>, new FunctionObject<Object>(){...});
私がしたいとKEY TYPEので、私はこれをしませんでした強制関数オブジェクトは、クラスキーまたはスーパータイプの型を持って、私が実際に定義したいことはこれです:
Map<Class<E extends T>, FunctionObject<? super E>>> map;
どのように私は、所望の効果を達成することができますか?タイプセーフな異種容器は唯一の選択肢ですか?参照からのデータの入力を許可するには、マップジェネリックタイプはどのように見えますか?
ユースケースに応じて動作します。 –
はい、しかし、getを実装することは、楽しみがXDを開始するときです。 –
'get()'は 'FunctionObject