Pages: [1]   Go Down
Print
Author Topic: STATIC FACTORY (2) - classe Boolean (esempio)  (Read 845 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Nessuno
Apprendista Forumista
**
Offline Offline

Posts: 204



« on: 24-03-2011, 21:57:14 »

La classe Boolean fatta a lezione non è che compili tanto...a me dà l'errore seguente:
Code:
MetodiStaticFactory.java:60: variable v might not have been initialized
     Boolean v = v.NewIstanceOf(a);
                 ^
1 error

Code:
class Boolean{
  
  static  boolean T;
  static boolean F;  
  
  static final Boolean TRUE = new Boolean(T);
  static  final Boolean FALSE = new Boolean(F);
  

  //COSTRUTTORE STANDARD
  private Boolean(boolean value)
  {
 
    if (value) T=value;
    else F=value;

  }

  public static Boolean NewIstanceOf(boolean value)
  {

    return new Boolean(value);  
  }
  
  public static Boolean ValueOf(boolean value)
  {
    return (value ? TRUE : FALSE);
  }
  public static Boolean ValueOfString1(String value)
  {
    if(value.equals("TRUE")) return TRUE;
    if(value.equals("FALSE")) return FALSE;
    
    return null;
  }
  public static Boolean ValueOfString2(String value)
  {
    return value.equals("TRUE")?TRUE : value.equals("FALSE")?FALSE : null;
  }
}

public class MetodiStaticFactory
{
  public static void main (String[]args)
  {
    boolean a = true;
     Boolean v = v.NewIstanceOf(a);
  }
}
Perchè mi dà questo errore nel main?....
Avete provato a compilare la classe esempio fatta a lezione?
Grazie in anticipo
« Last Edit: 24-03-2011, 22:23:55 by Nessuno » Logged

Sorridi anche se il tuo sorriso è triste, perchè più triste di un sorriso triste c'è la tristezza di non saper sorridere.

::Jim Morrison::
ɹǝǝuıƃuǝsɹǝʌǝɹ
Administrator
God of the Forum
*****
Offline Offline

Gender: Male
Posts: 4.474


Più grande è la lotta, e più è glorioso il trionfo


WWW
« Reply #1 on: 24-03-2011, 22:52:30 »

In questo codice:
Code:
Boolean v = v.NewIstanceOf(a);
tu stai chiedendo di accedere al metodo NewInstanceOf dell'oggetto referenziato da v, solo che v, in questo punto di codice, non è ancora stato inizializzato (in particolare non gli è ancora stato assegnato alcun riferimento, nemmeno null!!!).

Ad ogni modo, la ragionevolezza induce a pensare che il compilatore potrebbe anche lasciar invocare metodi statici su variabili riferimento a oggetto di una certa classe, anche se l'oggetto in sé non è ancora stato inizializzato, giacché dell'oggetto in sé non viene né letto né scritto lo stato (e ogni oggetto in qualche modo rappresenta il suo stato, a meno che non li si voglia vedere come variabili della programmazione funzionale, come in Featherweight Java, ...).

Sarebbe auspicabile che questa cosa sia corretta nelle prossime funzioni di Java, non in quanto bug, ma come una feature aggiuntiva .

In conclusione, il modo auspicabile (e corretto, nel tuo caso) per invocare metodi statici (anche per far risaltare subito agli occhi la loro staticità già leggendo il codice) sarebbe di invocarli sulla classe che li contiene. Nel tuo caso, così:
Code:
Boolean v = Boolean.NewInstanceOf

Leggo inoltre che il docente vi richiede di usare la nomenclatura CamelCase, tuttavia in Java la convenzione standard per la nomenclatura è un CamelCase modificato nel fatto che la primissima lettera va rigorosamente tenuta minuscola. Fateglielo presente, se ve la sentite .

Buona sera .

(EDIT: avevo scritto "buona sera" due volte  boh)
« Last Edit: 24-03-2011, 23:08:14 by reversengineer » Logged

La grande marcia della distruzione mentale proseguirà. Tutto verrà negato. Tutto diventerà un credo. È un atteggiamento ragionevole negare l'esistenza delle pietre sulla strada; sarà un dogma religioso affermarla. È una tesi razionale pensare di vivere tutti in un sogno; sarà un esempio di saggezza mistica affermare che siamo tutti svegli. Accenderemo fuochi per testimoniare che due più due fa quattro. Sguaineremo spade per dimostrare che le foglie sono verdi in estate. Non ci resterà quindi che difendere non solo le incredibili virtù e saggezze della vita umana, ma qualcosa di ancora più incredibile: questo immenso, impossibile universo che ci guarda dritto negli occhi. Combatteremo per i prodigi visibili come se fossero invisibili. Guarderemo l'erba e i cieli impossibili con uno strano coraggio. Saremo tra coloro che hanno visto eppure hanno creduto.

In tutto, amare e servire.

  
                            ن                           
I can deal with ads,
I can deal with buffer,
but when ads buffer
I suffer...

...nutrimi, o Signore, "con il pane delle lacrime; dammi, nelle lacrime, copiosa bevanda...

   YouTube 9GAG    anobii  S  Steam T.B.o.I. Wiki [univ] Lezioni private  ʼ  Albo d'Ateneo Unicode 3.0.1
Usa "Search" prima di aprire un post - Scrivi sempre nella sezione giusta - Non spammare - Rispetta gli altri utenti - E ricorda di seguire il Regolamento
Nessuno
Apprendista Forumista
**
Offline Offline

Posts: 204



« Reply #2 on: 25-03-2011, 09:33:46 »

...In conclusione, il modo auspicabile (e corretto, nel tuo caso) per invocare metodi statici (anche per far risaltare subito agli occhi la loro staticità già leggendo il codice) sarebbe di invocarli sulla classe che li contiene. Nel tuo caso, così:
Code:
Boolean v = Boolean.NewInstanceOf
[/i]....


Cioè..io dovrei istanziare un oggetto passando attraverso un metodo statico della classe( ..NewIstanceOf() in questo caso..) , perchè il suo costruttore è privato e quindi inaccessibile dall'esterno..ma per accedere ad un suo metodo statico devo prima istanziare l'oggetto(e per far questo il costruttore deve esser pubblico)..sembra il cane che si morde la coda..non ho capito Sad .. Boolean v = Boolean.NewInstanceOf dove dovrei piazzarlo???
Logged

Sorridi anche se il tuo sorriso è triste, perchè più triste di un sorriso triste c'è la tristezza di non saper sorridere.

::Jim Morrison::
Nessuno
Apprendista Forumista
**
Offline Offline

Posts: 204



« Reply #3 on: 25-03-2011, 10:01:50 »

OK OK ...risolto ogni dubbio Smiley;

Grazie infinite Reverse...il tuo commento mi ha fatto riflettere un bel po'. Smiley
Logged

Sorridi anche se il tuo sorriso è triste, perchè più triste di un sorriso triste c'è la tristezza di non saper sorridere.

::Jim Morrison::
Pages: [1]   Go Up
Print
Jump to: