Инициализировать универсальный массив Java типа универсальный - PullRequest
7 голосов
/ 22 июня 2009

Итак, у меня есть этот универсальный класс HashTable, который я разрабатываю, и я хочу использовать его универсально для любого числа входящих типов, а также хочу инициализировать внутренний массив хранения как массив LinkedList (для целей коллизий). ), где каждый LinkedList указан заранее (для обеспечения безопасности типов), чтобы иметь тип универсального из класса HashTable. Как я могу сделать это? Следующий код лучше всего разъясняет мои намерения, но, конечно, не компилируется.

public class HashTable<K, V>
{
    private LinkedList<V>[] m_storage;

    public HashTable(int initialSize)
    {
        m_storage = new LinkedList<V>[initialSize];
    }
}

Ответы [ 2 ]

15 голосов
/ 22 июня 2009

Обобщения в Java не позволяют создавать массивы с универсальными типами. Вы можете привести массив к универсальному типу, но при этом появится предупреждение о непроверенной конверсии:

public class HashTable<K, V>
{
    private LinkedList<V>[] m_storage;

    public HashTable(int initialSize)
    {
        m_storage = (LinkedList<V>[]) new LinkedList[initialSize];
    }
}

Здесь - хорошее объяснение, не вдаваясь в технические подробности того, почему создание общего массива не разрешено.

0 голосов
/ 17 сентября 2009

Кроме того, вы можете подавить предупреждение для метода по методу, используя аннотации:

@SuppressWarnings("unchecked")
public HashTable(int initialSize) {
    ...
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...