java.lang.ClassCastException:[Ljava.lang.Object; 与[Ljava.lang.String;不兼容;

AKI*_*WEB 1 java classcastexception

我试图从linkedhashset中检索随机元素.下面是我的代码,但它每次都给我例外.

private static void generateRandomUserId(Set<String> userIdsSet) {

    Random rand = new Random(System.currentTimeMillis());
    String[] setArray = (String[]) userIdsSet.toArray();
    for (int i = 0; i < 10; ++i) {
        System.out.println(setArray[rand.nextInt(userIdsSet.size())]);
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我得到的例外 -

java.lang.ClassCastException: [Ljava.lang.Object; incompatible with [Ljava.lang.String;

谁可以帮我这个事?还有更好的方法吗?

ass*_*ias 11

试试这个:

String[] setArray = userIdsSet.toArray(new String[userIdsSet.size()]);
Run Code Online (Sandbox Code Playgroud)

toArray不带参数方法返回一个Object[]不能转换为a的方法String[].在其他版本返回一个类型数组.

  • @ Paolof76如果你使用`set.toArray(new String [0])`,你创建一个空数组(`new String [0]`),`toArray`方法将创建一个正确大小的数组.如果使用`set.toArray(new String [set.size()]);`,`toArray`方法使用你的数组并返回它,因此只创建一个数组. (2认同)