#java #compiler-errors #hashmap #incompatibletypeerror
#java #ошибки компилятора #hashmap #ошибка несовместимого типа
Вопрос:
Я работаю над приложением на основе 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 и получить этот элемент.
Комментарии:
1. В сторону: что именно вы собираетесь
(ele == null ? null : ele)
делать? Это почти то же самое, что и justele
.2. Я хочу получить объект myMap, который я сохранил в кэше, если значение ele не равно null, возвращая значение ele, в котором сохранен объект карты. @AndyTurner
3. Я никогда не использовал ehcache, но быстрый взгляд на Javadoc для класса Element показывает, что у него есть методы getObjectKey и getObjectValue. Я бы предположил, что вы сможете получить свою карту, используя метод getObjectValue и приведение к Map<String, String>
4. Вы создали карту. Затем вы создали элемент. Это два разных объекта совершенно разных типов.
5. @ToddDunlap — точно .. мне нужно использовать метод getObjectValue, но как я могу привести к Map<String,String> , пожалуйста, посоветуйте.
Ответ №1:
В вашем комментарии к коду указано, что вы сохраняете карту, но в вашем коде хранится элемент. Не должно удивлять, что элемент не является map .
Смотрите Документы для http://www.ehcache.org/apidocs/3.1.3/org/ehcache/Cache.html#put-K-V —, они довольно ясны:
cache.put("myMap", map);
На самом деле я не совсем уверен, как скомпилирован ваш код. Похоже, что не существует версии put, которая принимает один параметр.
Комментарии:
1. Нет, он по-прежнему выдает мне ошибку, указанную ниже, найденную net.sf.ehcache. Элемент требовал java.util.Map<Строка, строка> даже когда я использовал cache.put(«myMap»,map)
Ответ №2:
Я думаю, вы путаетесь во вложенных картах, которые у вас есть (ваша карта и карта EhCache).
Итак, в основном, когда вы делаете { cache.put(новый элемент («myMap», map)) } вы добавляете в карту ehcache одну запись с идентификатором: «myMap» и присваиваете значение вашей «карте». Однако технически эта запись представляет собой единый объект типа ‘Element’, который инкапсулирует ключ и значение в ehcache.
Для извлечения обратно вы должны снова получить элемент (это то, что вы вставили) и из этого элемента получить значение (которое является map ). проверьте ниже:
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();
Я бы посоветовал для такого рода проблем, вы можете просто отладить свой код и проверить, какие данные находятся внутри ваших объектов. Тогда вы можете легко выяснить, что происходит.