【问题标题】:Java cast of ArrayList<Map>ArrayList<Map> 的 Java 转换
【发布时间】:2013-02-05 10:18:18
【问题描述】:

很抱歉,我对 Java 不是很有经验。 我正在使用 Eclipse 作为 IDE。 Eclispe 抱怨我无法理解的未经检查的演员表。 请参考代码片段。 一般如何做到这一点?

public Liberty2Server(ArrayList<Map<String,String>> libertySourceFiles , String basePath) throws FileNotFoundException , IllegalArgumentException {
    // check input file path
    for( Object map : libertySourceFiles) {
        Map<String,String> mp = (Map<String,String>) map ;  // <==Eclipse complains here: Unchecked cast from Object to Map<String,String>

欢迎任何提示

罗尔夫

【问题讨论】:

  • 提示可能与您的当前问题无关。一旦我开始传递复杂的集合组合(例如地图列表),我就会创建一个表示并包含它的特定对象。它使代码不那么冗长,您可以在一个位置实现填充/迭代和前置/后置条件

标签: java casting arraylist


【解决方案1】:

您可以更改您的 for 循环并使用集合中的显式类型:

for(Map<String,String> map : libertySourceFiles) {
    Map<String,String> mp = map; //probably not needed any more
}

【讨论】:

    【解决方案2】:

    这意味着您正在执行编译器无法检查是否安全的强制转换。

    它会警告您必须检查它是否安全。

    更好的解决方案是通过使用来消除对演员表的需求

    for(Map<String, String> mp : libertySourceFiles) {
    

    【讨论】:

      【解决方案3】:

      Eclipse 抱怨,因为您想将 Object 转换为 Map&lt;String, String&gt;。将运行变量map 的类型更改为Map&lt;String, String&gt;,一切都会好起来的。你甚至不需要变量mpthen。

      【讨论】:

        【解决方案4】:

        这里的问题是您将ArrayList&lt;Map&lt;String,String&gt;&gt; 元素向上转换为Object,然后将其向下转换为泛型类型。 解决方法很简单:

        public Liberty2Server(ArrayList<Map<String,String>> libertySourceFiles , String basePath) throws FileNotFoundException , IllegalArgumentException {
            // check input file path
            for(  Map<String,String> mp : libertySourceFiles) {
              //  Map<String,String> mp = (Map<String,String>) map ; Not needed anymore
              ....
        

        【讨论】:

          猜你喜欢
          • 2014-05-20
          • 1970-01-01
          • 1970-01-01
          • 2020-01-16
          • 1970-01-01
          • 1970-01-01
          • 2020-07-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多