Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    155

    Classe generica

    Ciao a tutti io ho una classe Lista che mi inserisce dei nodi, me li cancella e me li trova.
    Il mio problema è che dovrei renderla generica, ma non so esattamente come fare. Provo a postare il codice. Qualcuno saprebbbe darmi una mano??


    class Lista {

    private static class Nodo<T> { // static private

    private T info;
    // Object info; // package access
    Nodo<T> next;
    Nodo(T info, Nodo<T> next) {

    this.info = info;
    this.next = next;
    System.out.println(this.info+" "+this.next);
    }
    }

    private int count = 0;
    private Nodo<T> testa = null;

    public int getCount() {
    return count;
    }
    /**
    * Metodo che inserisce un elemento nella lista
    *
    */
    public <T>void add(T x) {
    testa = new Nodo(x, testa);
    ++count;
    }



    /**
    * Metodo trova un elemento nella lista
    *
    */
    public <T>T find (T x){
    Nodo tmp = testa;
    while (tmp != null) {
    x = tmp.info;
    if (b.nome.equals(x))
    return T;
    tmp = tmp.next;
    }
    return null;
    }
    /**
    * Metodo che cancella un elemento qualsiasi dalla lista
    * @exception ListaVuotaException
    */
    public <E>boolean cancella(Object a) throws ListaVuotaException{
    Nodo oldTemp;
    Nodo temp=testa;

    if(testa==null)
    return false;
    if(a==(Animale)testa.info)
    testa=testa.next;
    else
    {
    while(temp!=null){
    oldTemp=temp;
    temp=temp.next;
    if(a==(Animale)temp.info){
    oldTemp.next=temp.next;
    break;
    }
    }

    }
    return true;


    }

    }
    L'add dovrebbe funzionare ma non so come fare il find ed il cancella...grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Classe generica

    Originariamente inviato da sarto76
    Il mio problema è che dovrei renderla generica, ma non so esattamente come fare.
    Anche la classe Lista deve essere parametrica. Poi per la classe Nodo hai sostanzialmente 2 possibilità: o la metti come classe nested (come hai fatto tu, cioè innestata come 'static') oppure la metti come inner-class normale (non local/anonymous, per intenderci).

    Nel primo caso la classe Nodo deve avere un suo tipo parametrico in quanto non "vede" il tipo parametrico di Lista. Nel secondo caso, come inner-class, può "vedere" il tipo parametrico di Lista.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    155
    grazie mille, ma quindi mi conviente togliere lo static e farla diventare una inner-class?
    Ma per quanto riguarda il find, gli passo il parametro così come ho fatto?
    Grazie ancora

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da sarto76
    grazie mille, ma quindi mi conviente togliere lo static e farla diventare una inner-class?
    La questione più che altro è di "design". Una inner-class ha una relazione molto particolare con la classe che la contiene, in quando ha al suo interno un reference alla classe contenitore e può quindi "vedere" e usare i suoi membri.
    In questo caso, per la classe Nodo, non c'è propriamente questa necessità. Personalmente opterei per la versione con Nodo come nested-class.

    Originariamente inviato da sarto76
    Ma per quanto riguarda il find, gli passo il parametro così come ho fatto?
    Se parametrizzi la classe Lista non è più necessario rendere "generici" i metodi mettendo <T> prima del tipo di ritorno.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    155
    scusa un'ultima domanda: allora se faccio una classe nested come è già adesso, devo inserire il parametro T sia nel nodo che in Lista, oppure ho bisogno di 2 parametri diversi?
    Scusami ma faccio molta confusione con queste generalizzazioni, è la prima volta che le provo...

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da sarto76
    scusa un'ultima domanda: allora se faccio una classe nested come è già adesso, devo inserire il parametro T sia nel nodo che in Lista, oppure ho bisogno di 2 parametri diversi?
    Puoi fare così:

    codice:
    class Lista<E>
    {
        private static class Nodo<T> { .... }
    
        ....
    }
    A dire il vero potresti anche metterli con lo stesso nome (<T> invece di <E>) ma in ogni caso sono parametri diversi e non in relazione tra di loro. Sono cioè contesti diversi. Comunque ti consiglio di non metterli uguali ma ad esempio come sopra (solo per evitare confusione).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.