Visualizzazione dei risultati da 1 a 6 su 6

Discussione: problema coi generics

  1. #1

    problema coi generics

    Salve a tutti, stavo provando a fare un esercizio dell'uni sui generics di java ma non riesco proprio a capire ne come si fa, ne cosa devo fare.. sul testo c'è scritto "basta che il programma compili, non è necessario fargli fare niente", ma io non ci riesco comunque.
    codice:
    import java.util.*;
    
    public class ProvaGenerics{
        class Figura{
        }
        
        class Punto extends Figura{
            int x, y;
            
            public Punto(int x, int y){
                this.x = x;
                this.y = y;
            }
            
            public String toString(){
                return "Punto: (" + x + "," + y + ")";
            }
        }
        
        class Linea extends Figura{
            int x1,x2,y1,y2;
            
            public Linea(int x1, int y1, int x2, int y2){
                this.x1 = x1;
                this.y1 = y1;
                this.x2 = x2;
                this.y2 = y2;
            }
            
            public String toString(){
                return "Linea: (" + x1 + "," + y1 + " - " + x2 + "," + y2 + ")";
            }
        }
        
        Set<Figura> raccolta;
    
        public static void main(String[] Args){
        }
    
    }
    il codice che loro mi danno è questo.. io devo aggiungere a raccolta un paio di punti, un paio di linee e stampare il tutto a video.. ma non riesco.. mi da diversi errori, tipo variabili non statiche , Set è abstract, ecc.. qualcuno mi da una mano?? non posso modificare il codice loro, devo solo completare quello che mi danno..
    Grazie, sono davvero disperata

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

    Re: problema coi generics

    Originariamente inviato da littlecow
    il codice che loro mi danno è questo..
    Ti hanno spiegato cosa sono le "inner class"?? Perché Figura, Punto e Linea sono classi dichiarate dentro la classe ProvaGenerics e non essendo marcate 'static' sono appunto "inner class". Una istanza di una inner class deve sempre essere associata ad una istanza della classe che fa da "contenitore" (nel tuo caso è ProvaGenerics).

    Quindi per istanziare un oggetto Punto o Linea (non vedo il senso di istanziare un oggetto Figura) devi prima istanziare ProvaGenerics e poi istanziare Punto e Linea con una sintassi particolare dovuta al fatto che sono inner class.

    Poi in:

    Set<Figura> raccolta;

    Set è una interfaccia e ovviamente non puoi istanziare una interfaccia! Devi invece istanziare una classe che sia una implementazione "concreta" di Set, ad esempio HashSet o TreeSet o LinkedHashSet. Ed assegnare il reference alla variabile 'raccolta'.
    E visto che 'raccolta' è una variabile di istanza, devi usare un reference ad una istanza di ProvaGenerics.

    La mia impressione è che in quel codice ci sia troppa "carne al fuoco" (oltreché essere poco chiaro circa ciò che viene chiesto di fare .... che vuol dire e che senso ha "basta che il programma compili"???). E dovresti conoscere tutta una serie di cose sulle inner class e sulle collezioni.

    Se hai qualche altro dubbio, comunque chiedi pure senza problemi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    si, all'esame c'era scritto chiaramente che doveva solo compilare.. la parte di stampare a video l'ho aggiunta io così almeno ho un riscontro pratico di quello che fa il programma..
    Si le abbiamo fatte le inner class e anche le interface.. Solo che io quel codice non posso modificarlo.. tecnicamente dovrei scrivere solo il main ma nonstante 2 settimane di prova non ci sono riuscita..

    l'unico che ho fatto funzionante è però modificato e quindi penso che se lo consegno non me lo valutano in quanto ho modificato il loro codice


    Solo una cosa.. mi fate un esempio per capire come creare un punto e una linea con questo codice??

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da littlecow
    Si le abbiamo fatte le inner class e anche le interface..
    Allora dovresti sapere come si istanziano le inner class.

    Originariamente inviato da littlecow
    Solo una cosa.. mi fate un esempio per capire come creare un punto e una linea con questo codice??
    Nel main:

    codice:
    ProvaGenerics pg = new ProvaGenerics ();
    Punto p = pg.new Punto (....blabla....);
    Linea l = pg.new Linea (....blabla....);
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    si lo so.. mi ero dimenticata solo il pg nel pg.new, usavo new e mi dava errore.. comunque c'ero.. però tecnicamente l'esercizio è sbagliato in quanto devo creare una raccolta di linee e punti.. non di ProvaGenerics, esatto? a questo punto il prossimo esame modifico il loro codice spostando la classe principale e rendendo le altre classi non più inner class.. magari gli scrivo anche qualcosa nei commenti

    grazie per l'aiuto.. speriamo bene.. l'altra volta ho consegnato in bianco e mi sono rovinata la media di 31..

    Comunque alla fine ho risolto così.. vi sembra giusto o c'è qualche errore o si può migliorare?

    codice:
    public class ProvaGenerics{
        static List<Figura> raccolta;
    
        public static void main(String[] Args){
            raccolta = new ArrayList<Figura>();
            raccolta.add(new Punto(20, 10));
            
    Iterator it = raccolta.iterator();
       while (it.hasNext()) {
           Object val = it.next();
           System.out.println(val.toString());
       }
    
        }
    
    }

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da littlecow
    però tecnicamente l'esercizio è sbagliato in quanto devo creare una raccolta di linee e punti.. non di ProvaGenerics, esatto?
    Non è sbagliato .... la istanziazione di ProvaGenerics ti sarebbe servita solo per: a) poter istanziare le inner class e b) poter accedere alla variabile di istanza 'raccolta'. Tutto lì.

    Originariamente inviato da littlecow
    a questo punto il prossimo esame modifico il loro codice spostando la classe principale e rendendo le altre classi non più inner class.. magari gli scrivo anche qualcosa nei commenti
    Ah beh ... così stravolgi tutto il codice che ti è stato dato .... non avevi detto che non potevi modificarlo???

    Guarda che potevi fare tutto quanto nel main(), senza toccare il resto del codice che ti è stato dato.

    Originariamente inviato da littlecow
    Comunque alla fine ho risolto così.. vi sembra giusto o c'è qualche errore o si può migliorare?
    Tecnicamente è corretto. Invece di usare esplicitamente l'iteratore potevi usare il ciclo for-each (se lo conosci) e il toString() che hai messo è superfluo.
    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.