Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460

    costruttore con tipo enum

    mi sto creando il solito progetto per testare le varie cose imparate dal libro, siccome non trovo esempi in rete, ho provato a fare un costruttore che gestisce un tipo enum:

    codice:
    package book.examples;
    
    public class Telefonino {
    	
    	public Telefonino(enum myFormFactor,boolean myFlashCamera) {
    		formFactor = myFormFactor;
    		flashCamera = myFlashCamera;
    	}
    
    	enum formFactor {FULLTOUCH,CANDYBAR,SLIDE}
    	int pixelXDisplay;
    	int pixelYDisplay;
    	int pixelCamera;
    	boolean flashCamera;
    	String nomeProduttore;
    	String nomeModello;
    }
    ora, tralasciando il fatto che ho lasciato incompleto il corpo del metodo costruttore per questo errore insieme al resto della classe, l'errore si risolve se enumero le opzioni del tipo enum così:

    codice:
    package book.examples;
    
    public class Telefonino {
    	
    	public Telefonino(enum myFormFactor {FULLTOUCH,CANDYBAR,SLIDE},boolean myFlashCamera) {
    		formFactor = myFormFactor;
    		flashCamera = myFlashCamera;
    	}
    
    	enum formFactor {FULLTOUCH,CANDYBAR,SLIDE}
    	int pixelXDisplay;
    	int pixelYDisplay;
    	int pixelCamera;
    	boolean flashCamera;
    	String nomeProduttore;
    	String nomeModello;
    }
    la domanda è: perché ?
    della firma di un metodo non fanno parte solo quantità e tipo delle variaibili, tipo e valore restituito dal metodo? in altre parole, scrivere che il tipo è un enum non è sufficiente?

    uso eclipse.

  2. #2
    Allora partiamo col dire che un enum non è un tipo primitivo (se non è chiaro questo è difficile capirsi). Quindi essendo un "Tipo", e ti ricordo che java e strettamente tipato, Nel primo caso tu cerchi di passare come primo parametro del costruttore l'oggetto myFormFactor di tipo enum il che non è possibile in quanto "enum" è una parola chiave in java e quindi non potresti mai potuto dichiarare una classe,enumeratore,interfaccia etc con questo nome.
    Il secondo pezzo di codice non so come fa a funzionarti, in quanto non è possibile dichiarare un parametro in quel modo....
    il modo per dichiarlo è questo:
    codice:
    public class Telefonino
    {
    
    	private formFactor formFactor;
    
    	enum formFactor
    	{
    		FULLTOUCH, CANDYBAR, SLIDE
    	}
    	public Telefonino(formFactor myFormFactor, boolean myFlashCamera, boolean flashCamera)
    	{
    		formFactor = myFormFactor;
    		flashCamera = myFlashCamera;
    	}
    
    
    }

  3. #3
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    Originariamente inviato da francesco.muia
    Allora partiamo col dire che un enum non è un tipo primitivo (se non è chiaro questo è difficile capirsi). Quindi essendo un "Tipo", e ti ricordo che java e strettamente tipato, Nel primo caso tu cerchi di passare come primo parametro del costruttore l'oggetto myFormFactor di tipo enum il che non è possibile in quanto "enum" è una parola chiave in java e quindi non potresti mai potuto dichiarare una classe,enumeratore,interfaccia etc con questo nome.
    Il secondo pezzo di codice non so come fa a funzionarti, in quanto non è possibile dichiarare un parametro in quel modo....
    il modo per dichiarlo è questo:
    codice:
    public class Telefonino
    {
    
    	private formFactor formFactor;
    
    	enum formFactor
    	{
    		FULLTOUCH, CANDYBAR, SLIDE
    	}
    	public Telefonino(formFactor myFormFactor, boolean myFlashCamera, boolean flashCamera)
    	{
    		formFactor = myFormFactor;
    		flashCamera = myFlashCamera;
    	}
    
    
    }
    quindi enum si comporta come String? Cioé non sono tipi primitivi ma classi o oggetti a seconda dei casi (se sono istanziati o meno in oggetti) ?

    non mi è chiara però la dichiarazione

    codice:
    private formFactor formFactor;
    cosa crea? un oggetto? istanzia qualcosa?

  4. #4
    codice:
    private formFactor formFactor;
    Istanziare non istanzia nulla, dichiara un oggetto di nome "formFactor" ma poteva anche chiamarsi pippo di tipo "formFactor" che è il tuo enumeratore

  5. #5
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    Originariamente inviato da francesco.muia
    codice:
    private formFactor formFactor;
    Istanziare non istanzia nulla, dichiara un oggetto di nome "formFactor" ma poteva anche chiamarsi pippo di tipo "formFactor" che è il tuo enumeratore
    ti ringrazio, ultima domanda, immagino che dichiararlo private faccia parte solo delle buone norme di programmazione e non abbia collegamenti diretti con il tipo enum, chiedo questo perché l'ho sempre visto dichiarato come private e mai commentato esplicitamente.

  6. #6
    Esatto il modificatore di visibilità non c'entra nulla con il tipo enum

  7. #7
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    Originariamente inviato da francesco.muia
    Esatto il modificatore di visibilità non c'entra nulla con il tipo enum
    ottimo

    ho riadattato il codice e risolto il problema

    codice:
    private formFactor myFormFactor;
    	
    	enum formFactor{
    		FULLTOUCH, CANDYBAR, SLIDE
    	}
    	
    	public Telefonino(formFactor myFormFactor){
    		this.myFormFactor = myFormFactor;
    	}
    così ho anche usato this, penso vada bene così, o ci sono strade migliori?

  8. #8
    di strade ce ne sono tante, giusto per fare i "puristi", l'enumeratore lo protresti dichiarare in file apposito "FormFactor" (da notare che ho cambiato la prima lettera in maiuscolo...).
    codice:
    /*
     * FormFactor.java
     */
    public enum FormFactor
    {
    	FULLTOUCH, CANDYBAR, SLIDE
    }
    Cmq qui viene spiegato tutto riguardo gli enumeratori.

  9. #9
    Utente di HTML.it L'avatar di Freax
    Registrato dal
    Jul 2006
    Messaggi
    460
    Originariamente inviato da francesco.muia
    di strade ce ne sono tante, giusto per fare i "puristi", l'enumeratore lo protresti dichiarare in file apposito "FormFactor" (da notare che ho cambiato la prima lettera in maiuscolo...).
    codice:
    /*
     * FormFactor.java
     */
    public enum FormFactor
    {
    	FULLTOUCH, CANDYBAR, SLIDE
    }
    Cmq qui viene spiegato tutto riguardo gli enumeratori.
    in pratica li tratto come String, solo che la classe String me la da già Java mentre quella di tipo enum me la creo da solo in base al mio elenco ed ai miei campi e metodi.

    grazie per il link, penso di aver capito come funziona il tipo enum, non so perché ma sui libri di programmazione è sempre il più bistrattato

    grazie ancora

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    non fare confusione, enum è la parola chiave che identifica una Enumeration mentre String è una classe (alla base sono due concetti differenti).

    enum è una parola chiave che ti permette di creare delle strutture particolari, String è una classe che consente l'uso delle funzionalità di base sulle stringhe: la prima serve a te per il tuo programma, la seconda è di utilità generale.
    Come paragone mi sembra molto forzato

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.