исключение несовместимого типа при получении объекта карты

#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) делать? Это почти то же самое, что и just ele .

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();
  

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