java - 如何将 "check"强制转换?

标签 java generics dictionary android-studio casting

我写了一个从 Map 中获取随机值的方法。我首先获取 map 中的所有值并使用 Random 对象来获取随机值。方法如下:

public static <K, V> V getRandomValInMap (Map<K, V> map) {
    Collection<V> values = map.values ();
    V[] array = (V[])values.toArray ();
    return array[random.nextInt (array.length)];
}

在表达式中

(V[])values.toArray ()

Android Studio 表示它是“从 Object[]V[] 的未经检查的转换”。所以我想这有点“冒险”。我尝试使用 toArray 的另一个重载:

V[] array = new V[values.size()];
array = values.toArray (array);

而且我想这不是您使用重载的方式,因为有一个编译器错误提示我无法初始化 V

所以我想也许我应该使用第一种方法。但是我如何“检查”强制转换以取消警告?

或者,您可以告诉我如何正确使用 toArray(T[] array) 重载。

最佳答案

您不能创建泛型数组,这是 Java 中的一个已知限制并且有很好的理由。所以这是不可能的:V[] array = new V[values.size()];

另见:

What's the reason I can't create generic array types in Java?

关于java - 如何将 "check"强制转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33165290/

相关文章:

java.lang.IncompatibleClassChangeError : Implementing class Mongo

Java KeyListener "object update"

c# - 通用函数错误

java - 具有继承支持泛型问题的构建器模式

python - 正确选择由字典组成的数据库

arrays - 在 golang 中创建 map 数组的 map

python - 将文件转换为字典?

java - 为什么这个Java树遍历不起作用?

java - 在Windows中从java代码发送短信(文本)到手机

c# - 通用 List.Count 给出 System.ArgumentException