2013-06-20 8 views
5

In questo codice sto realizzando un'implementazione di una lista concatenata generica in java.Avviso cast non selezionato in Java?

public class LL<Item extends Comparable<Item>> { 

La mia classe Node è definita come

private class Node{ 
private Item data; 
private Node next; 
public Node(Item data){ 
    this.data = data; 
    next = null; 
} 
} 

Ora il mio dubbio è, io continuo a ricevere avvisi quando codifica

Node x = head, y = (Node) b.head; 
Type safety: Unchecked cast from LL.Node to LL<Item>.Node 

Dovrei ignorare questo, perché il compilatore genera questo. E c'è una soluzione?

EDIT:

B è di tipo LL, la firma funzione è simile

public void mergeAlternate(LL b){ 

E la testa è una variabile di istanza privata di classe LL

private Node head; 
+0

'@SuppressWarnings (" deselezionata ")' – NINCOMPOOP

+12

@TheNewIdiot Dovrebbe capire ** perché ** l'avviso si verifica, non solo ciecamente sopprimerlo. Se questa fosse una risposta sarebbe da me immediata. –

+3

Qual è il tipo di 'b' e' b.head'? –

risposta

3

Se sei creando un'implementazione generica allora dovrebbe essere anche generico internamente.

Manca il parametro di tipo per la classe Node. Dovrebbe essere generico come questo:

private class Node<T extends Comparable<T>> { 
    private T data; 
    private Node<T> next; 
    public Node(T data){ 
     this.data = data; 
     next = null; 
    } 

} 

E dove si utilizza tale classe si può fare qualcosa di simile:

new Node<Item> // ...

E il codice sarà simile a questa:

Node<Item> x = head, y = b.head; 

e non riceverai avvertimenti in questo modo.

Il mio senso di ragno tuttavia mi dice che c'è qualche problema architettonico lì. Dal momento che non ci hai mostrato tutto il tuo codice, non possiamo aiutarti ulteriormente.

+1

'T si estende comparabile '? –

+1

Se capisci il codice, sembra che 'Node' sia una classe interna all'interno della classe' LL', per farlo funzionare dovresti contrassegnarlo come 'statico' e avere il' Nodo '. Avendo questo, devi solo dichiarare il nodo 'Nodo ;' variabili senza problemi. –

+0

Non dovrebbe essere 'statico' dato che non lo userà senza un'istanza di' LL'. Ho usato 'T' invece di' Item'. Avrei anche potuto usare 'ITEM' ma usare' Item' per un nome di parametro di tipo lo confonde con un nome di tipo reale. –

Problemi correlati