Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Parametri di tipo

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305

    Parametri di tipo

    codice:
    interface Animale<C extends Cibo>{
            void mangia(C cibo);
    } 
    
    public class Erbivoro<E extends Erba> implements Cibo,Animale<E>{
                   public void mangia(E erba){
                   
                   }
    }
    Che differenza c'è nel definire la classe erbivoro in questo modo
    codice:
    public class Erbivoro implements Cibo,Animale<Erba>{
    
                    public void mangia(Erba erba){
                   
                   }
    }

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Secondo me è errato (in entrambi i casi) far implementare Cibo ad Erbivoro.

    Erbivoro non è-un Cibo mentre è corretto che Erbivoro è-un Animale.(poi dipende da cosa intendi con Cibo, ma non è chiaro ora). Non è l'interfaccia in sé a turbarmi, ma il fatto che sia chiami Cibo ^^'Dato inoltre che la caratteristica di Erbivoro è di mangiare Erba, io non lo specificherei dall'esterno. Quindi:

    codice:
    public class Erbivoro implements Animale<Erba> { ... }
    Nell'altro caso potresti poter fare una cosa del genere: new Erbivoro<Carne>()... che ha poco senso.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    un Erbivoro è il cibo di un carnivoro!! quindi erbivoro è anche un cibo. cosi come per noi ogni animale oltre a essere un animale è anche un cibo

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Non è l'interfaccia in sé a turbarmi, ma il fatto che sia chiami Cibo ^^'Dato inoltre che la caratteristica di Erbivoro è di mangiare Erba, io non lo specificherei dall'esterno.


    Potresti riscrivere meglio, proprio in italiano non mi è chiaro ciò che hai scritto . grazie

    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Nell'altro caso potresti poter fare una cosa del genere: new Erbivoro<Carne>()... che ha poco senso.
    Purchè carne estenda erba però !!

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Potresti riscrivere meglio, proprio in italiano non mi è chiaro ciò che hai scritto . grazie

    Purchè carne estenda erba però !!
    Scusami, ho fatto un po' di confusione io e ho detto qualche minchiata (ho letto di fretta durante un deploy)

    A:
    codice:
    public class Erbivoro<E extends Erba> implements Cibo, Animale<E> { 
        public void mangia(E e) { }
    }
    B:
    codice:
     
    public class Erbivoro implements Cibo,Animale<Erba> { 
        public void mangia(Erba erba) { }
    }
    La differenza tra A e B è che

    in A tu costruisci un erbivoro dicendogli cosa mangerà. E mangerà solo quello

    Quindi

    Erbivoro<Mele> e = new Erbivoro<Mele>();
    e.mangia(new Mele()); // OK

    e.mangia(new Pere()); // NO!

    In B invece l'oggetto da mangiare lo passi direttamente a mangia() quindi puoi fare:

    e.mangia(new Mele()); // OK
    e.mangia(new Pere()); // OK!

    (sempre restando su sottoclassi di Erba)


    Spero di non aver scritto minchiate, sono fuso oggi .-.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Scusami, ho fatto un po' di confusione io e ho detto qualche minchiata (ho letto di fretta durante un deploy)

    A:
    codice:
    public class Erbivoro<E extends Erba> implements Cibo, Animale<E> { 
        public void mangia(E e) { }
    }
    B:
    codice:
     
    public class Erbivoro implements Cibo,Animale<Erba> { 
        public void mangia(Erba erba) { }
    }
    La differenza tra A e B è che

    in A tu costruisci un erbivoro dicendogli cosa mangerà. E mangerà solo quello

    Quindi

    Erbivoro<Mele> e = new Erbivoro<Mele>();
    e.mangia(new Mele()); // OK

    e.mangia(new Pere()); // NO!

    In B invece l'oggetto da mangiare lo passi direttamente a mangia() quindi puoi fare:

    e.mangia(new Mele()); // OK
    e.mangia(new Pere()); // OK!

    (sempre restando su sottoclassi di Erba)


    Spero di non aver scritto minchiate, sono fuso oggi .-.
    supponendo pero anche nel caso A che mele sia sottoclasse di erba

  7. #7
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Spero di non aver scritto minchiate, sono fuso oggi .-.
    E ci credo...con tutta questa erba...
    I computer sono incredibilmente veloci, accurati e stupidi.
    Gli uomini sono incredibilmente lenti, inaccurati e intelligenti.
    Insieme sono una potenza che supera l'immaginazione.

    A.Einstein

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 © 2026 vBulletin Solutions, Inc. All rights reserved.