2009-06-22 32 views
6

Tengo esta clase de HashTable de propósito general que estoy desarrollando, y quiero usarla genéricamente para cualquier cantidad de tipos entrantes, y también quiero inicializar la matriz de almacenamiento interna para que sea una una matriz de LinkedList (con fines de colisión), donde cada Lista enlazada se especifica previamente (para la seguridad del tipo) para que sea del tipo genérico de la clase HashTable. ¿Cómo puedo lograr esto? El siguiente código es el mejor para aclarar mi intención, pero por supuesto no compila.Inicializar una matriz genérica de Java de tipo genérico

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

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

duplicado de http://stackoverflow.com/questions/529085/java-how-to-generic-array- creación – skaffman

Respuesta

15

Los genéricos en Java no permiten la creación de matrices con tipos genéricos. Puede emitir su matriz a un tipo genérico, pero esto va a generar un aviso de conversión sin control:

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

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

Here es una buena explicación, sin entrar en los detalles técnicos de por qué no se permite genérica creación de la matriz.

+1

+1 Gracias por la gran respuesta y recurso. –

+0

Puede agregar @SuppressWarnings ({"unchecked"}) a la tarea para mantener el compilador en silencio. –

+0

La página a la que se ha vinculado no es en realidad lo mismo. [Esta sección] (http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedTypes.html#FAQ104) de las Preguntas frecuentes sobre genéricos de Angelika Langer lo explica muy bien. –

0

Además, se puede suprimir la advertencia sobre un método mediante el método de base mediante anotaciones:

@SuppressWarnings("unchecked") 
public HashTable(int initialSize) { 
    ... 
    } 
Cuestiones relacionadas