Non compila

di il
13 risposte

Non compila

Ragazzi ho questo codice dovrei compilarlo ma mi da 2 errori
1.public class Pippo { 
2.Interface Exportable {
3.   Void export();
}

class Tool implements Exportable {
   protected void export () {
      System.out.println("Tool::export");
   }
}

class ReportTool extends Tool implements Exportable {
   public void export() {
      System.out.println("RTool::export");
   }   
  
   public static void main (String [] args) {
     Tool aTool = new ReportTool();
     Tool bTool = new Tool();
     callExport(aTool); 
     callExport(bTool);
   } 
   public static void callExport (Exportable ex) {
      ex.export();
  }
  }
} 
l'ho chiamato pippo.java e mi da errore a riga 2 e 3 nel prompt dice che si aspetta un ; in tuttedue le righe

13 Risposte

  • Re: Non compila

    maracaibo25 ha scritto:


    Ragazzi ho questo codice dovrei compilarlo ma mi da 2 errori
    Non compila comunque per diverse cose.

    A parte quei 1. 2. 3. che si vedono (che non ci vanno ovviamente):
    a) Interface è con la maiuscola (sbagliato, va minuscola)
    b) Il metodo export in Exportable dichiara ritorno Void (è java.lang.Void !!!)
    c) La implementazione in Tool dichiara void (che NON è java.lang.Void)

    Insomma, RIscrivilo bene.
  • Re: Non compila

    http://www.gestionecorsi.eu/tprep/Exam-Prep_OCA_Java_SE_8_Programmer_I/index.html
    guarda andbin ti rimando al link del codice cosi semplifichiamo le cose ,ho solo aggiunto la classe Pippo per poterlo compilare grazie
  • Re: Non compila

    maracaibo25" post_id="8635835" time="1572909318 ha scritto:


    guarda andbin ti rimando al link del codice cosi semplifichiamo le cose
    Si era capito che hai voglia di prendere la certificazione ma non hai voglia di studiare Java in prima persona, non c'era bisogno di specificare
  • Re: Non compila

    E questo la dice tutta sulle certificazioni...
  • Re: Non compila

    Weierstrass ha scritto:


    maracaibo25" post_id="8635835" time="1572909318 ha scritto:


    guarda andbin ti rimando al link del codice cosi semplifichiamo le cose
    Si era capito che hai voglia di prendere la certificazione ma non hai voglia di studiare Java in prima persona, non c'era bisogno di specificare
    No dai questo non è vero la voglia ce l'ho, non ho molto tempo per dedicarmi allo studio tutto qua, detto questo mi puoi aiutare con questo codice?
  • Re: Non compila

    maracaibo25 ha scritto:


    mi puoi aiutare con questo codice?
    Diverse cose le ho già dette io prima sul perché non può compilare.
    Adesso l'ho guardato meglio e noto che Pippo racchiude tutto quanto. Quindi, Exportable è una nested interface, Tool/ReportTool sono delle inner class. E questo vuol dire, per dirne una, che un metodo static (il main!) NON lo puoi mettere in una inner class (idem il callExport).

    Quindi scusa, il tuo dubbio quale è?
  • Re: Non compila

    andbin ha scritto:


    maracaibo25 ha scritto:


    mi puoi aiutare con questo codice?
    Diverse cose le ho già dette io prima sul perché non può compilare.
    Adesso l'ho guardato meglio e noto che Pippo racchiude tutto quanto. Quindi, Exportable è una nested interface, Tool/ReportTool sono delle inner class. E questo vuol dire, per dirne una, che un metodo static (il main!) NON lo puoi mettere in una inner class (idem il callExport).

    Quindi scusa, il tuo dubbio quale è?
    Scusa Andbin....per capire. c'è differenza tra nested e inner? (nidificata - interna)? o sono terminiche si usano solo per convenzione. teoricamente dovrebbe essere la stessa cosa.
    inoltre il codice (modificato e indentato)
    
    public class Pippo { 
    	interface Exportable {
    		void export();
    	}
    
    	class Tool implements Exportable {
    -------->>>>>>   cannot reduce the visibility of the inherited method from Pippo.Exportable
    changhe method visibility to public   <<<<<--------   =======>>>>>> che significa esattamente?  <<<<<=========
    		protected void export () {
    			System.out.println("Tool::export");
    		}
    	}
    
    	class ReportTool extends Tool implements Exportable {
    		public void export() {
    			System.out.println("RTool::export");
    		}   
    
    ------>>>>>the method main cannot be declared static; static methods can only be declared in a static or topo level type<<<<<<------  e qua ci siamo!!!
    		public static void main (String [] args) {
    			Tool aTool = new ReportTool();
    			Tool bTool = new Tool();
    			callExport(aTool); 
    			callExport(bTool);
    		} 
    		public static void callExport (Exportable ex) {
    			ex.export();
    		}
    	}
    } 
    
    modificando il programma in due classi, una Pippo e l'atra Tester, ho comunque errori:
    
    public class Pippo { 
    	interface Exportable {
    		void export();
    	}
    
    	class Tool implements Exportable {
    		public void export () {     <<<---- ho dovuto cambiare in public  *****************
    			System.out.println("Tool::export");
    		}
    	}
    
    	class ReportTool extends Tool implements Exportable {
    		public void export() {
    			System.out.println("RTool::export");
    		}   
    	}
    } 
    
    
    import prj2.Pippo.Exportable;
    import prj2.Pippo.ReportTool;
    import prj2.Pippo.Tool;
    
    public class Tester {
    	public static void main (String [] args) {
    		Tool aTool = new ReportTool();   <<<----- qui ho un errore che non capisco il significato * 
    		Tool bTool = new Tool();
    		callExport(aTool); 
    		callExport(bTool);
    	} 
    	public static void callExport (Exportable ex) {
    		ex.export();
    	}
    
    
    }
    
    *
    Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    	No enclosing instance of type Pippo is accessible. Must qualify the allocation with an enclosing instance of type Pippo (e.g. x.new A() where x is an instance of Pippo).
    
    	at prj2.Tester.main(Tester.java:9)
    
    PS: l'import :
    
    import prj2.Pippo.Exportable;
    import prj2.Pippo.ReportTool;
    import prj2.Pippo.Tool;
    
    l'ha fatto Eclipse da solo. e non capisco! pensavo si potessero importare solo le librerie..... ma quindi la libreria java.util.* non è altro che una classe enorme ?

    Nel progetot prj2, cosa mi sta dicendo eclipse? e come dovrebbe essere il programma per funzionare?
    Sembrava banale come codice, ma fose a occhi esperti....
    Grazie.
    Tagan
  • Re: Non compila

    tagan ha scritto:


    Scusa Andbin....per capire. c'è differenza tra nested e inner? (nidificata - interna)? o sono terminiche si usano solo per convenzione. teoricamente dovrebbe essere la stessa cosa.
    Sono due cose differenti. Un tipo "nested" è innanzitutto static (una nested interface è implicitamente static, le interfacce non si istanziano e quindi non possono essere "inner").
    Un tipo "inner" innanzitutto non è static ed ha la peculiarità di avere una "relazione" molto particolare con la classe che fa da "contenitore", poiché innanzitutto per creare la inner class devi avere prima una istanza della classe contenitore su cui poi invochi new per creare la inner.

    tagan ha scritto:


    inoltre il codice (modificato e indentato)
    Ma io continuo a NON capire perché devi mettere una classe Pippo che racchiude più tipi .... cosa ti aspetti o pensi di fare così??

    tagan ha scritto:


    
    	class Tool implements Exportable {
    -------->>>>>>   cannot reduce the visibility of the inherited method from Pippo.Exportable
    changhe method visibility to public   <<<<<--------   =======>>>>>> che significa esattamente?  <<<<<=========
    		protected void export () {
    			System.out.println("Tool::export");
    		}
    	}
    I metodi nelle interfacce sono sempre implicitamente public. E per le regole in GENERALE di Java, quando fai un override di un metodo NON puoi "restringere" il livello di accesso. Se non hai ancora studiato queste cose ... è meglio che le studi SUBITO, perché altrimenti una certificazione Programmer (OCPJP) semplicemente non la passi ....

    tagan ha scritto:


    ------>>>>>the method main cannot be declared static; static methods can only be declared in a static or topo level type<<<<<<------ e qua ci siamo!!!
    Infatti è quello che dicevo prima, in una inner class non puoi mettere metodi static.
  • Re: Non compila

    andbin ha scritto:


    I metodi nelle interfacce sono sempre implicitamente public. E per le regole in GENERALE di Java, quando fai un override di un metodo NON puoi "restringere" il livello di accesso. Se non hai ancora studiato queste cose ... è meglio che le studi SUBITO, perché altrimenti una certificazione Programmer (OCPJP) semplicemente non la passi ....
    Pefetto capito tutto.
    non ricordavo che le interfacce hanno i metodi public e non è possibile abbassare il livello di accessibilità.

    inoltre ho risolto con questo codice nella classe Tester, codice che non avevo mai visto prima....mi spieghi come è possibile scrivere istanza.new ? E' il modo per creare instanze di classi inner?
    
    		Pippo p = new Pippo();
    		Tool aTool = p.new ReportTool();
    		Tool bTool = p.new Tool();
    
    Comunque nono sono io che ha fatto il post principale e sta cercando di avere la certificazione. io ho iniziato ora a studiare Java.
    mi interessava l'esempio, anche se quello che ha postato è tutto sbagliato. forse nel test chiedevano che tipo di errore avrebbe riportato il compilatore.
    boh!

    Grazie.
    Tagan
  • Re: Non compila

    tagan ha scritto:


    mi spieghi come è possibile scrivere istanza.new ? E' il modo per creare instanze di classi inner?
    Sì, è quella la forma:

    istanzaContenitore.new ClasseInner()

    dove istanzaContenitore potrebbe anche essere implicitamente il this se questa cosa la fai in un metodo "di istanza" della classe contenitore. Insomma, la istanza della classe inner deve sempre essere "associata" alla istanza della classe contenitore.

    tagan ha scritto:


    Comunque nono sono io che ha fatto il post principale e sta cercando di avere la certificazione.
    Ah oops, vero. A volte rispondo ma senza prestare attenzione agli username!

    tagan ha scritto:


    io ho iniziato ora a studiare Java.
    Ok, bene.

    tagan ha scritto:


    forse nel test chiedevano che tipo di errore avrebbe riportato il compilatore.
    Forse è così .... non so per certo.
  • Re: Non compila

    Comunque nono sono io che ha fatto il post principale e sta cercando di avere la certificazione. io ho iniziato ora a studiare Java.
    mi interessava l'esempio, anche se quello che ha postato è tutto sbagliato. forse nel test chiedevano che tipo di errore avrebbe riportato il compilatore.
    boh!
    tagan sono io che cerco di prepararmi per la certificazione,il codice che ho postato all'inizio l'ho copiato riga per riga dall'esercizio,ho aggiunto solo la classe Pippo
    il test chiede se compila,e se non compila a che riga sono gli errori :
    protected void export () {

    o qua
    public void export() {
    o in quest'altra riga,o in tuttedue,scusate forse non l'ho detto
  • Re: Non compila

    maracaibo25 ha scritto:


    ho aggiunto solo la classe Pippo
    E a che scopo?? Non serve .... (e causa altri problemi, come già detto)

    maracaibo25 ha scritto:


    il test chiede se compila,e se non compila a che riga sono gli errori
    Sicuramente un errore di compilazione è il "restringimento" del livello di accesso.
  • Re: Non compila

    andbin ha scritto:


    maracaibo25 ha scritto:


    ho aggiunto solo la classe Pippo
    E a che scopo?? Non serve .... (e causa altri problemi, come già detto)

    È vero non serviva
Devi accedere o registrarti per scrivere nel forum
13 risposte