2016-10-12 4 views
-2

Я работаю над Java-приложением. У меня есть карта, которую я хочу сохранить в ehcache и получить ее позже. Ниже приведен код.исключение несовместимого типа при получении объекта карты

Map<String,String> map = new HashMap<String,String>(); 
map.put("1","AAA"); 
map.put("2","BBB"); 

final Cache cache = getCache(); // creating the cache object 
cache.removeAll(); 
cache.put(new Element("myMap", map));//Storing the java.util.Map object in Cache 
//to get the cache 
final Element ele = cache.get("myMap"); 
Map<String,String> map = (ele == null ? null : ele); 

Его бросает мне ошибку ниже

incompatible types. found net.sf.ehcache.Element required java.util.Map<String,String> 

Пожалуйста, советы, как я могу сохранить объект карты в Ehcache и получить этот элемент.

+0

Кроме того, что именно вы намерены использовать с '(ele == null? Null: ele)'? Это почти то же самое, что и «ele». –

+0

Я хочу получить объект myMap, который я хранил в Cache, если ele не возвращает null элементу, который хранит объект карты. @AndyTurner – user222

+0

Я никогда не использовал ehcache, но быстрый взгляд на Javadoc для класса [Element] (http://www.ehcache.org/apidocs/2.9/net/sf/ehcache/Element.html) показывает, что он имеет методы getObjectKey и getObjectValue. Я бы предположил, что вы можете получить свою карту, используя метод getObjectValue и кастинг для Map

ответ

0

В вашем комментарии к коду указано, что вы храните карту, но ваш код хранит элемент. Не должно быть сюрпризом, что Элемент не является картой.

Смотрите документацию для http://www.ehcache.org/apidocs/3.1.3/org/ehcache/Cache.html#put-K-V-, они довольно ясно:

cache.put("myMap", map); 

Я на самом деле не совсем уверен, как ваш код компилируется. Кажется, что не существует версии put, которая принимает один параметр.

+0

Нет, он все равно дает мне ниже найденную ошибку net.sf.ehcache.Element требуется java.util.Map , даже когда я использовал cache.put ("myMap", map) – user222

0

Я думаю, что вы запутались во вложенных Картах, которые у вас есть (карта вашей карты и карты EhCache).

Так что, когда вы делаете {cache.put (новый элемент («myMap», map))} вы добавляете в ehcache карту одну запись с id: «myMap» и оцениваете свою «карту». Однако технически эта запись представляет собой единственный объект типа «Элемент», который инкапсулирует ключ и значение в ehcache.

Для возврата назад вы снова получите элемент (это то, что вы вставили), и из этого элемента получите значение (которое является картой). проверьте ниже:

final Cache cache = cacheManager.getCache("123"); // creating the cache object 
cache.removeAll(); 
cache.put(new Element("myMap", map));//Storing the java.util.Map object in Cache 
// get your element back 
final Element ele = cache.get("myMap"); 
// get the value of our object. ehcache works with generic objects so you need tocache to your map. Doing a cast since it works with generic object 

map = (Map<String, String>) ele.getObjectValue(); 

Я бы посоветовал по этой проблеме вы можете просто отладить свой код и проверить, какие данные находятся внутри ваших объектов. Тогда вы можете легко понять, что происходит.

Смежные вопросы