0

ええと...私は実際に「Adapter」と呼ばれるクラスを使用して、任意のオブジェクトを別のオブジェクトに変換するクラスを実装しています。HashMap を使用して、タイプ SOURCE -> TARGET の各ペアをマッピングしています: HashMap 、 HashMap < Class< ? >、アダプタ > >。各タイプにはアダプターがあります。例: String は、Integer、Double などに変換できます。アダプターを入手するには:

 Adapter adapter = map.get(String.class).get(Integer.class);

アダプターを動的に取得します。

 Adapter adapter = map.get(< source_object >.getClass()).get(Integer.class);

私の問題は、その HashMap に java.util.Collections$UnmodifiableMap へのキーを入れる必要があることです。サーブレットからのリクエスト パラメータ コレクションはマップです。しかし、.getClass() を使用すると、java.util.Collections$UnmodifiableMap が返されます。キー java.util.Collections$UnmodifiableMap.class をアダプター HashMap に置くことは不可能です:(

誰かが私を助けることができますか?

4

2 に答える 2

1

UnmodizableMapをHashMapでラップするのに役立ちますか?

source_object = new HashMap<Object, Object>(source_object);

非常に非効率的であまりエレガントではありませんが、一時的な回避策でしょうか?

于 2012-08-31T00:47:59.147 に答える
1

助けてくれたtmmllrに感謝します!私は彼の提案に基づいて解決策を改善します! java.util.Collections.unmodifiableMap(new HashMap<>()).getClass() を使用して、HashMap アダプターのソースにインデックスを配置しました。より効率的な方法です:

 adapters.put(java.util.Collections.unmodifiableMap(new HashMap< >()).getClass(),...); 

したがって、java.util.Collections$UnmodifiableMap インスタンスを渡して、適切なアダプターを取得できます。これは動作します \0/

2番目の解決策を見つけてくれたveerに感謝します:

 Class.forName("java.util.Collections$UnmodifiableMap");

これが最も実践的な方法だと思います!

于 2012-08-31T01:44:32.947 に答える