如何索引java.util.Collections $ UnmodifiableMap的类类型?

时间:2012-08-31 00:39:44

标签: java reflection collections map

嗯......我实际上正在实现一个类,使用名为“Adapter”的类将任何对象转换为另一个对象。我正在映射每对类型SOURCE - > TARGET使用HashMap:HashMap,HashMap<类< ? >,适配器>取代。每种类型都有适配器。例如:String可以转换为Integer,Double等。要获得适配器:

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

我将以dinamically的方式获得适配器:

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

我的问题是我需要在HashMap中输入java.util.Collections $ UnmodifiableMap的关键字。来自Servlets的Request参数集合是一个映射。但是,当我使用.getClass()时,返回java.util.Collections $ UnmodifiableMap。是不可能在适配器HashMap上放置一个关键的java.util.Collections $ UnmodifiableMap.class :(

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

将UnmodifiableMap包装在HashMap中会有帮助吗?

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

效率低而且不是很优雅,但可能是临时的解决方法?

答案 1 :(得分:1)

感谢tmmllr的帮助!我基于他的建议和改进解决方案!我使用以下命令将索引放在HashMap适配器上:java.util.Collections.unmodifiableMap(new HashMap&lt;&gt;())。getClass()。更有效的方式:

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

因此我可以传递java.util.Collections $ UnmodifiableMap实例并获得正确的适配器!这工作\ 0 /

万分感谢转向找到第二个解决方案:

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

我认为这是最常用的做法!