java.lang.ClassCastException: \[Ljava.lang.Object;不能转换为 \[Ljava.lang.String;

新手上路,请多包涵

我需要将 HashMap 转换为 String 数组,下面是我的 java 代码

import java.util.HashMap;
import java.util.Map;

public class demo {

    public static void main(String[] args) {

        Map<String, String> map1 = new HashMap<String, String>();

        map1.put("1", "1");
        map1.put("2", "2");
        map1.put("3", "3");

        String[] str = (String[]) map1.keySet().toArray();

        for(int i=0; i<str.length;i++) {
            System.out.println(str[i]);
        }
    }
}

当我运行代码时,我得到以下 ClassCastException

 Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at demo.main(demo.java:17)

原文由 JackSun 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 515
2 个回答

toArray() 返回一个 Object[] ,无论泛型如何。您可以改用重载变体:

 String[] str = map1.keySet().toArray(new String[map1.size()]);

或者,由于 SettoArray 方法不能保证顺序,并且您使用数组的目的只是打印出值,您可以迭代 keySet() 直接:

 for (String str: map1.keySet()) {
    System.out.println(str);
}

编辑:只是为了完成图片,在 Java 8 中,可以使用 foreach 方法使代码更优雅:

 map1.keySet().forEach(System.out::println);

原文由 Mureinik 发布,翻译遵循 CC BY-SA 3.0 许可协议

它正在返回 Object[] 不是 String[] 。尝试这个:

 Object[] obj = (Object[]) map1.keySet().toArray();
for(int i=0; i<obj.length;i++) {
    String someString = (String)obj[i];
    System.out.println(someString);
}

原文由 Sabuj Hassan 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题