我有以下方法:
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的通用数组”,这很明显。我该如何解决这个问题?
答案 0 :(得分:5)
为什么不返回Set
?无论如何,这似乎更有意义。
public static <T, U> Set<T> getKeysForValue(Map<T, U> map, U value) {
...
return keys;
}
另一种方法是,如果你仍想要返回一个数组,那就是传递一个数组作为参数填充:
public static <T, U> T[] getKeysForValue(Map<T,U> map, U value, T[] dest) {
...
return keys.toArray(dest);
}
答案 1 :(得分:4)
您应该将与T
对应的类作为方法的参数传递,然后调用Array.newInstance(clazz, size)
public static <T, U> T[] getKeysForValue(Class<T> clazz, Map<T,U> map,U value){
T[] array = (T[])Array.newInstance(clazz, size);