Pages: [1]   Go Down
Print
Author Topic: Tipi generici e Classe Object  (Read 655 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
callo
Forumista
***
Offline Offline

Gender: Male
Posts: 564


"Quanto manca alla vetta?";"Tu sali e non pensare"


« on: 31-01-2011, 01:24:13 »

Ragazzi sto affrontando lo studio dei tipi generici in java e ho voluto creare una classe generica per l'implementazione di una coda usando liste linkate semplici! Non sto capendo però una cosa(vi posto il pezzo di codice dove non capisco l'errore  così mi aiutate a capire dove sto sbagliando!):
Classe generica Node <E>:
(Guardate il metodo setElement!!)
Code:

public class Node <E>
{
private Node <E> next;
private E element;
public Node(E element,Node<E>next)
{
this.element=element;
this.next=next;
}
public Node()
{
element=null;
next=null;
}
public E getElement()
{
return element;
}
public Node <E> getNext()
{
return next;
}
public void setNext(Node <E> newNext)
{
next=newNext;
}
public void setElement(E newElement)
{
element=newElement;
}

}

Classe Coda metodo enqueue:
Code:
public void queue(Object obj)
{
Node<E> nodo = new Node<E>();
nodo.setElement(obj); //Qui è l'errore!!!!
nodo.setNext(null);
if(size==0)//vuol dire che sto inserendo il primo elemento quindi la testa
head=nodo;
else
{
tail.setNext(nodo);
tail=nodo;
}
size++;
}

Questo è l'errore:
Code:
The method setElement(E) in the type Node<E> is not applicable for the arguments (Object)

Quello che non capisco è : il metodo setElement si prende come parametro un oggetto generico E perchè questo oggetto non può essere applicato alla classe Object??E se facessi un cast?tipo
Code:
nodo.setElement((E)obj);
è ammissibile una cosa del genere??Grazie a tutti per l'aiuto.
Logged

"A cavallina....a cavallina.....a chi era bedda quannu  curreva" [Cit.  Dal Tenerissimo via plebiscito]
KingDavid
Forumista
***
Offline Offline

Posts: 788


Alla fine [...] tutta la realtà è binaria.


« Reply #1 on: 31-01-2011, 03:42:09 »

Credo che non sia possibile perchè non puoi controllare se obj è instanceof E.
Credo che la soluzione più logica sia quella di definire i metodi della coda con i generics. Per cui anche il metodo queue dovrebbe essere definito come
Code:
public void queue(E element)
Logged

Basti pensare che un ipotetico quadrato di specchi, lungo 200 chilometri per ogni lato, potrebbe produrre tutta l'energia necessaria all'intero pianeta.
(Carlo Rubbia)
Pages: [1]   Go Up
Print
Jump to: