Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Costruttore non void

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457

    Costruttore non void

    Salve ragazzi,
    sto lavorando per progetto in cui ho trovato la seguente classe:

    codice:
    public class LoadListaSportelliTask extends BaseAuthAsyncTask {
    	Enum<?> tipoPrenotazione;
    	boolean loadFamiliari;
    
    	public <T> LoadListaSportelliTask(Activity context, Handler _handler, int _what, Enum<?> _tipoPrenotazione, boolean _background) {
    		super(context, _handler, _what, _background);
    		tipoPrenotazione=_tipoPrenotazione;
    		loadFamiliari=false;
    	}
    	
    	public <T> LoadListaSportelliTask(Activity context, Handler _handler, int _what, Enum<?> _tipoPrenotazione, boolean _loadFamiliari, boolean _background) {
    		super(context, _handler, _what, _background);
    		tipoPrenotazione=_tipoPrenotazione;
    		loadFamiliari=_loadFamiliari;
    	}
    ....
    
    }
    È la prima volta che vedo un costruttore con affianco un tipo <T>,

    che cosa significa?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Premesso che in quel particolare caso non vedo perchè dichiarare un tipo T che poi non viene usato, passo alla spiegazione del perchè è ammesso l'uso di un tipo generico nel costruttore.

    E' ammesso perchè il costruttore, dal punto di vista del linguaggio, è un metodo come un'altro e ciascun metodo (compresi, quindi, i costruttori) può introdurre dei tipi generici, che possono essere usati solo nel contesto del metodo/costruttore in cui sono dichiarati (lo scope di questi tipi generici è limitato al metodo in cui sono dichiarati).

    Qui la documentazione.

    Esempio, in una classe qualunque io posso creare un metodo che introduce un tipo generico, perchè può averne bisogno:

    codice:
    public class MiaClasse {
       ...
       public<T> void elaboraTipoGenerico(T mioOggetto) {
          ... // Qui lavoro con l'oggetto T "mioOggetto"
       }
    }
    Nota che se non avessi indicato che "T" è un tipo generico, il compilatore cercherebbe una classe di nome "T" da usare per il parametro.

    Se sto introducendo un tipo generico che non è previsto dalla classe (non c'è nell'intestazione della classe), allora devo specificarlo prima del tipo di ritorno del metodo. Nell'esempio, ho specificato che il metodo "elaboraTipoGenerico" userà un tipo generico T, specificandolo prima del "void". La stessa identica cosa può essere fatta nel costruttore e l'unico punto in cui può essere fatto è dopo il modificatore di accesso (dato che i costruttori non hanno un tipo di ritorno).

    Quello che non mi è chiaro dal codice che hai postato è perchè sia stato dichiarato l'uso di un tipo generico T che, in sostanza, non viene usato (da nessuna parte c'è un parametro di tipo T).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    I costruttori non restituiscono mai un valore.

    Il simbolo che vedi, <T>, indica l'uso dei Generics. Infatti anche Enum è dichiarata come Generica, ma usa una wildcard (il punto interrogativo).
    Il costruttore generico dice che il parametro generico è solo relativo a quello scopo (del costruttore o del metodo).


    PS: mi ha preceduto Lele in modo molto esaustivo. :P

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.