我需要转换hashmap到一个字符串数组,下面是我的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)
3条答案
按热度按时间2ic8powd1#
toArray()
返回一个Object[]
,不考虑泛型。您可以改用重载变量:或者,因为
Set
的toArray
方法不能保证顺序,而且您使用数组的目的只是打印出值,您可以迭代keySet()
直接:编辑:为了完成图片,在Java8中
foreach
方法可以使代码更加优雅:v6ylcynt2#
toArray()
方法是在列表接口中定义的,所以在每个有列表示例的地方,您都可以访问该方法。一开始,您可能认为可以将一个对象数组(其所有元素都是string类型)强制转换为一个string数组,但java规范中另有规定,即link,简而言之:
bArr = new B[]; A[] aArr = (A[]) bArr;
当且仅当b是a(或a本身)的子类型时,在运行时“起作用”。b实际上是否只包含as是不相关的,也不使用barr的编译时类型(重要的是运行时类型):在代码中调用:
image_urls.toArray()
您将得到一个object数组,因为object不是string的子类型,所以会得到exception。为此,请使用toArray()
它获取一个特定类型的数组(用于类型引用),如“mureinik”所述。kzmpq1sx3#
它回来了
Object[]
不是String[]
. 试试这个: