Я знаю, что вы не можете создать массив родового типа, вместо этого вам нужно прибегнуть к взлому. (Учитывая, что Java поддерживает общие массивы, а не их создание, мне непонятно, почему хак лучше, чем Java, поддерживающий создание общих массивов)
Вместо написания этого
Map.Entry<K, V>[] entries = new Map.Entry<K, V>[numEntries];
вам нужно написать это
@SuppressWarnings("unchecked")
Map.Entry<K, V>[] entries = (Map.Entry<K, V>) new Map.Entry[numEntries];
К сожалению, это не работает, если у вас есть массив вложенного типа общего
public class Outer<E> {
final Inner[] inners = new Inner[16]; // Generic array creation
class Inner {
}
}
Лучшая работа вокруг -
@SuppressWarnings("unchecked")
final Inner[] inners = (Inner[]) Array.newInstance(Inner.class, 16);
Это самое "элегантное" решение?
Я вижу Ошибка создания компиляции Generic Array из внутреннего класса, но решение здесь хуже IMHO.