Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957

    Metodi con paramentri diversi

    Ciao,
    so che con Java si posso fare più metodi omonimi con parametri diversi, volevo sapere se uno può chiamare un altro. Per spiegarmi faccio un esempio:


    salva (Object oggetto){
    ...salva_oggetto()....
    }

    salva (String nome){
    Object oggetto=this.getObj(nome);
    this.salva(oggetto);
    }


    Questi sono due metodi omonimi, il primo salva un oggetto, il secondo dovrebbe far lo stesso però prima deve andarsi a trovare il puntatore all'oggetto partendo dal suo nome. Quindi vorrei che il metodo vero e proprio fosse il primo, ma vorrei mettere anche il secondo in caso avessi il nome e non direttamente il riferimento. Questo è possibile?

    Spero di essermi spiegato,
    grazie.

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Fai un cast a Object.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    e un costruttore può richiamare un altro?
    esempio:
    codice:
    Costruttore(int numero){
        this.var=numero
    }
    Costruttore(){
        this.Costruttore(1);
    }
    Grazie

  4. #4
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Si, anche se generalmente si fa il contrario.

    Ovvero... un costruttore richiama un costruttore con un minor numero di parametri (O implicitamente quello di default o quello dell'eventuale superclasse) e poi effettua altre inizializzazioni.

    Anziche' richiamare il costruttore trovo piu' corretto e forse anche piu' efficiente inizializzare direttamente la variabile.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Ed_Bunker
    Si, anche se generalmente si fa il contrario.

    Ovvero... un costruttore richiama un costruttore con un minor numero di parametri (O implicitamente quello di default o quello dell'eventuale superclasse) e poi effettua altre inizializzazioni.

    Anziche' richiamare il costruttore trovo piu' corretto e forse anche piu' efficiente inizializzare direttamente la variabile.
    Non mi risulta che, solitamente, facciano il contrario... è più facile trovare un costruttore con pochi parametri che ne richiama uno più specifico, passandogli dei valori di default...
    Esempio:
    codice:
    public FileOutputStream(String name) throws FileNotFoundException {
       this(name != null ? new File(name) : null, false);
    }
    
    ...
    
    public FileOutputStream(String name, boolean append) {
       ...
    }
    In ogni caso, ci sono alcune cose da tenere presente, sia riguardo i metodi, che i costruttori.
    La pratica di avere più metodi con lo stesso nome si chiama overloading: sottoporre un metodo (o un costruttore) ad overload, significa variarne il numero o il tipo di parametri, mantenendo lo stesso nome.

    Per i costruttori, il metodo con cui se ne richiama un secondo è quello indicato dall'esempio precedente: si usa la parola chiave this, seguita dai parametri tra parentesi.


    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

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    957
    Perfetto! Grazie mille, era proprio quello che volevo sapere.

    Anziche' richiamare il costruttore trovo piu' corretto e forse anche piu' efficiente inizializzare direttamente la variabile.
    Si l'esempio che ho messo era stupido, ma in generale si potrebbero avere molte inizializzazioni e due o tre costruttori. In questo caso eviterei di riportare le inizializzazioni comuni su tutti i costruttori.

  7. #7
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Originariamente inviato da LeleFT
    Non mi risulta che, solitamente, facciano il contrario...
    Se ho un costruttore generale non sempre cio' che "voglio fare" e' richiamarne uno piu' "specifico".
    Anzi... piu' il costruttore e' "generale e piu' i costruttori specifici possono richiamarlo per mettere a comune alcune o tutte le inizializzazioni di default.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da Ed_Bunker
    Se ho un costruttore generale non sempre cio' che "voglio fare" e' richiamarne uno piu' "specifico".
    Anzi... piu' il costruttore e' "generale e piu' i costruttori specifici possono richiamarlo per mettere a comune alcune o tutte le inizializzazioni di default.
    Certo, nessuno ha detto che non si possa fare.
    Ma la pratica più comune (guardando anche i sorgenti Sun, come quello che ho postato sopra) è quella di permettere all'utente (programmatore) di utilizzare un costruttore con pochi parametri, dandogli la possibilità di evitare di scrivere inutilmente troppe informazioni, quando queste sono "superflue", o quando solitamente, in loro mancanza, si intende un valore specifico.

    E' il caso visto prima: solitamente non si va a specificare sempre e comunque il parametro "append" perchè lo si intende automaticamente a false.

    Altro esempio (più per i metodi che per i costruttori): quando chiedo la conversione di un numero da stringa a intero, non vado a indicare esplicitamente che la stringa rappresenta un numero in base 10... questa informazione può essere passata "di default" al metodo più specifico.

    Ad ogni modo, la cosa non è biunivoca: può essere utilizzata in entrambi i sensi... anche se il senso opposto lo vedo più adatto quando si ha una classe base (con pochi parametri) e una derivata con maggiori informazioni...


    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

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.