【发布时间】:2013-07-09 20:25:39
【问题描述】:
我有以下方法:
public static <T, U> T[] getKeysForValue(Map<T,U> map,U value){
if(map == null || map.isEmpty()) {
return null;
}
Set<T> keys = new HashSet<T>();
for (Map.Entry<T,U> entry : map.entrySet()) {
if (entry.getValue().equals(value)) {
keys.add(entry.getKey());
}
}
return keys.toArray(new T[keys.size()]);
}
我在线上遇到编译错误:keys.toArray(new T[keys.size()]),上面写着“无法创建 T 的通用数组”,这很明显。我该如何解决这个问题?
【问题讨论】:
-
@feralin 更长、更实用的答案会更好。 Java 泛型系统中的一些明显缺陷可以通过使用显式类型标记来解决。不幸的是,当类型参数本身被参数化时,这些都没有帮助,但这里不是这种情况。不知道如何在 Java 中做到这一点并不是拖钓的好借口。
-
@feralin 我在 C# 和 Java 方面拥有相同的专业知识,因此比较它们会引起很大的争议。
-
@millimoose 你为什么说我在拖钓?请您提供一些证据或证据吗?
-
@feralin 您的评论至少是“答案是您的语言很烂”的近邻。看到意图不会通过互联网转移,我没有“证据”,但话又说回来,我们不在法庭上。另外,在这件事上分心是忽略了我反对的关键,那就是你的评论不是很有建设性。