转换为地图

我有一张地图

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

我用这样的数据填充:

newMetaData.put( 
      ((String) elm.get("compa,codenameone"/>
	














首页 > 解决方案 > 地图转换为地图

我有一张地图

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

我用这样的数据填充:

newMetaData.put( 
      ((String) elm.get("compa

问题描述

我有一张地图

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

但不是得到 <String, String[] & gt; 的 Map。我得到 <String, Object[] > 的地图

任何帮助表示赞赏


Java 中的泛型是语法糖。它们被编译器擦除并被代号一忽略。这:

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

就生成的代码而言,等效于:

Map newMetaData = new LinkedHashMap();

有一些注意事项,因为当您使用诸如 set/put 之类的方法时,第一个版本也会添加强制转换,这在某些情况下可能会触发类强制转换异常。问题是这也可以反向工作,因此应该可以正常工作:

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

标签: codenameone

解决方案


Java 中的泛型是语法糖。它们被编译器擦除并被代号一忽略。这个:

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

就生成的代码而言,等效于:

Map newMetaData = new LinkedHashMap();

有一些注意事项,因为当您使用 set/put 之类的方法时,第一个版本也会添加强制转换,这在某些情况下可能会触发类强制转换异常。问题是这也可以反向工作,因此应该可以正常工作:

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

推荐阅读