Pages: [1]   Go Down
Print
Author Topic: Metodo Costruttore Builder  (Read 1562 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Geko
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 166


« on: 19-03-2010, 18:05:57 »

Ho provato ad implementare in java il costruttore builder, seguendo gli appunti presi in classe..

ma there is a problem..

class ClasseGenerica
   {
      private final int attributo1;
      private final int attributo2;
      private final byte attributo3;
      private final double attributo4;
      private final int attributo5;
         
      public ClasseGenerica(Builder builder)
         {
            attributo1= builder.attributo1;
            attributo2= builder.attributo2;
            attributo3= builder.attributo3;
            attributo4= builder.attributo4;
            attributo5= builder.attributo5;
            //
         }
         
      
      
      public static class Builder
         {
            private final int attributo1; // obbligatorio
            private final int attributo2; // obbligatorio
            private final byte attributo3;
            private final double attributo4;
            private final int attributo5;
            
            //metodi
            
            public Builder (int attributo1, int attributo2)
               {
                  this.attributo1=attributo1;
                  this.attributo2=attributo2;
               }
               
               
            public Builder attributo3 ( byte attributo3)
               {
                  this.attributo3=attributo3;
                  return this;
               }
            
            public Builder attributo4 ( double attributo4)
               {
                  this.attributo4=attributo4;
                  return this;
               }
            
            public Builder attributo5 ( int attributo5)
               {
                  this.attributo5=attributo5;
                  return this;
               }
               
            public ClasseGenerica Build()
         {
            return new ClasseGenerica(this);
         }
         
         }
      
      
   }



esBuilding.java:48: cannot assign a value to final variable attributo3
                  this.attributo3=attributo3;
                      ^
esBuilding.java:54: cannot assign a value to final variable attributo4
                  this.attributo4=attributo4;
                      ^
esBuilding.java:60: cannot assign a value to final variable attributo5
                  this.attributo5=attributo5;


Mi da questo errore perché non assegno nulla nella varibili facoltative nel costruttore.
Ma se pongo anche uguale a 0 nel costruttore implica che non potrò poi passarle con i metodi (es. attributo3 che restituisce un builder..)


Fatemi notare dove ho sbagliato..

Grazie in anticipo
Logged
Geko
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 166


« Reply #1 on: 19-03-2010, 18:11:25 »

l'unica opzione che ho previsto è quella di porre gli attributi non "obbligatori" come variabili quindi Non constanti.. ( senza "final"..
Logged
LexaIdo
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 110



« Reply #2 on: 19-03-2010, 18:37:25 »

anche a me la prima cosa che viene in mente è quella di togliere il final e inizializzare gli attributi 3, 4 e 5 a 0...
così il problema si dovrebbe risolvere, però magari c'è un modo più "elegante" di risolvere il problema... ciao
Logged
ilpuglio
Apprendista Forumista
**
Offline Offline

Posts: 300



« Reply #3 on: 19-03-2010, 22:52:33 »

 

Anche io ho provato ad implementare quello che ha spiegato il prof. ma ho avuto lo stesso problema. Come risolverlo?
Logged
Simone Faro
Moderator
Matricola
*****
Offline Offline

Gender: Male
Posts: 67


WWW
« Reply #4 on: 20-03-2010, 08:22:31 »

Cari studenti,
come potete notare nell'esempio presente alla pagina: http://www.dmi.unict.it/~faro/prog2/appunti/builder/NutritionFacts.java, all'interno dell'oggetto Builder solo i parametri obbligatori devono essere definiti come final, diversamente dai parametri facoltativi, che devono essere modificati prima della creazione dell'oggetto NutritionFacts da parte del metodo builder.
E' inoltre buona regola, come vi dicevo a lezione, inizializzare i parametri facoltativi con valori di default nel caso in cui questi non dovessero essere settati al momento della costruzione. Se tali parametri fossero definiti come final non potrebbero essere modificati in seguito dai metodi accessori.
Molto importante è invece che i parametri facoltativi vengano definiti come final all'interno della classe principale. Questi valori verranno inizializzati al momento della costruzione dell'oggetto ( con il metodfo build() ) e non dovranno essere più modificati in seguito.
Ciao a tutti e buon fine settimana
Il Prof
Logged

________________________________
Simone Faro, Ph.D.
Dipartimento di Matematica e Informatica
Università di Catania
________________________________
Pages: [1]   Go Up
Print
Jump to: