0

嗯......我实际上正在实现一个类,使用一个名为“适配器”的类将任何对象转换为另一个对象。我正在使用 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 的键。来自 Servlet 的请求参数集合是一个映射。但是,当我使用 .getClass() 时返回 java.util.Collections$UnmodifiableMap。不可能在适配器 HashMap 上放置密钥 java.util.Collections$UnmodifiableMap.class :(

有人可以帮助我吗?

4

2 回答 2

1

将 UnmodifiableMap 包装在 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/

百万感谢 veer 找到第二个解决方案:

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

我认为这是最实用的方法!

于 2012-08-31T01:44:32.947 回答