2009-06-22 17 views
6
generico

Quindi ho questa classe HashTable di uso generale che sto sviluppando, e voglio usarla genericamente per qualsiasi numero di tipi in arrivo, e voglio anche inizializzare l'array di archiviazione interno per essere un array di LinkedList (a scopo di collisione), in cui ogni LinkedList è specificata in anticipo (per tipo safety) per essere del tipo del generico dalla classe HashTable. Come posso realizzare questo? Il seguente codice è migliore per chiarire il mio intento, ma ovviamente non viene compilato.Inizializza array generico Java di tipo

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

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

duplicati di http://stackoverflow.com/questions/529085/java-how-to-generic-array- creazione – skaffman

risposta

15

Generics in Java non consente la creazione di array con tipi generici. Si può lanciare l'array a un tipo generico, ma questo genererà un avviso di conversione incontrollato:

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

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

Here è una buona spiegazione, senza entrare nei dettagli tecnici del motivo per cui non è consentita la creazione di array di generico.

+1

+1 Grazie per l'ottima risposta e la risorsa. –

+0

È possibile aggiungere @SuppressWarnings ({"deselezionato"}) all'assegnazione per mantenere il compilatore tranquillo. –

+0

La pagina a cui ti sei collegato non è in realtà la stessa cosa. [Questa sezione] (http://www.angelikalanger.com/GenericsFAQ/FAQSections/ParameterizedTypes.html#FAQ104) delle FAQ di Generic di Angelika Langer lo spiega bene. –

0

Inoltre, è possibile eliminare l'avviso su un metodo da basi metodo utilizzando le annotazioni:

@SuppressWarnings("unchecked") 
public HashTable(int initialSize) { 
    ... 
    } 
Problemi correlati