为toArray方法创建通用数组

Tap*_*ose 3 java generics toarray

我有以下方法:

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()]);
}
Run Code Online (Sandbox Code Playgroud)

我在线路上遇到编译错误:keys.toArray(new T[keys.size()])"无法创建T的通用数组",这很明显.我该如何解决这个问题?

ars*_*jii 5

为什么不回归Set?无论如何,这似乎在这种情况下更有意义.

public static <T, U> Set<T> getKeysForValue(Map<T, U> map, U value) {
    ...

    return keys;
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是,如果你仍想返回一个数组,那就是传递一个数组作为参数填充:

public static <T, U> T[] getKeysForValue(Map<T,U> map, U value, T[] dest) {
    ...

    return keys.toArray(dest);
}
Run Code Online (Sandbox Code Playgroud)