Карта <String, String []> преобразуется в карту <String, Object []) - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть карта

Map<String, String[]> newMetaData = new LinkedHashMap();

, который я заполняю такими данными:

newMetaData.put( 
      ((String) elm.get("companyName")).trim(), 
      new String[]{
         this.storeFile( "logo", (String) elm.get("logoLink") ),
         this.storeFile( "profile", (String) elm.get("companyProfile") ),
         this.storeFile( "action", (String) elm.get("drash") ),
         (String) elm.get("fwtografies")
       }
 );

StoreFile - это функция, которая возвращает строку. Я сохраняю эту карту в хранилище как

Storage.getInstance().writeObject("MetaData", newMetaData); 

Позже в коде я получаю приведенную выше карту как:

 Map<String, String[]> metaData = (Map)Storage.getInstance().readObject("MetaData");

Но вместо получения карты

любая помощь приветствуется

1 Ответ

0 голосов
/ 02 сентября 2018

Обобщения в Java являются синтаксическим сахаром. Они стираются компилятором и игнорируются Codename One по большей части. Это:

Map<String, String[]> newMetaData = new LinkedHashMap<>();

Эквивалентно этому с точки зрения генерируемого кода:

Map newMetaData = new LinkedHashMap();

Существуют некоторые предостережения, потому что первая версия также добавляет приведения, когда вы используете такие методы, как set / put, которые могут вызвать исключение приведения класса в некоторых случаях. Дело в том, что это работает и в обратном направлении, поэтому должно работать нормально:

Map<String, String[]> metaData = (Map<String, String[]>)Storage.getInstance().readObject("MetaData");
...