|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: May 2004
Messaggi: 1136
|
[Java] Uso di eccezioni nei costruttori e metodi get/set
Poniamo che una classe A abbia un costruttore nel quale un'istruzione può sollevare un'eccezione magari perché un parametro passato in input per essere assegnato ad una variabile ha un valore non valido.
1) Immagino che sia meglio gestire l'eccezione direttamente all'interno del costruttore, giusto (nel codice seguente si deve inserire un blocco try catch)? Codice:
class A {
private int n;
public A(int n){
if(n<0)
throw new MyException();
else
this.n = n;
}
}
2a) Nel caso affermativo, l'eccezione verrebbe sollevata dal metodo getN e nel costruttore dovrebbe essere solo gestita, giusto? 3) Ma è buona norma usare sempre e comunque i metodi get e set all'interno dei metodi di una classe per accedere agli attributi della stessa, anche nel caso non debbano essere fatti controlli su di essi? Non si avrebbero inutili cali di prestazioni (frequenti chiamate a funzione solo per accedere ad attributi della classe)? Grazie. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
|
in simili casi credo sia più una scelta di stile. Se la tua applicazione o classe non dovrà essere sviluppata oltre e quindi non prevede altre funzioni, potrebbe anche stare così. Però io personalmente preferisco definire dei metodi di get e set per le variabili che possono necessitare di modifica in fase di esecuzione. Se poi dovrai sviluppare l'applicazione ti può tornare molto utile l'avere disponibili già dei metodi intuitivi per quella variabile.
La mia filosofia, che credo sia quella generale delle classi, è la possibilità di essere riutilizzate nei più disparati ambiti, e funzioni di setting e getting permettono una migliore "interattività" dell'oggetto. Il calo di prestazioni è praticamente nullo in questo caso.
__________________
CPU Ryzen 5900X @ 4,7Ghz + Thermalright Phantom Spirit 120 SE / MB Asus X470-F Gaming / RAM 2x16GB DDR4 Corsair 3600 CL16 / VGA Sapphire RX 7900 XT Nitro+ / SSD Crucial T500 1TB + Samsung 970 Pro 512GB + Sandisk 960GB Ultra II / PSU FSP Hydro G PRO 1000W / Headset Kingston HyperX Flight |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Aggiungo un'altra cosa alle osservazioni di demos88 che sostanzialmente condivido: se per caso la tua classe dovesse diventare un bean, sarebbe opportuno gestire le eccezioni all'interno dei getter e setter anzichè all'interno del costruttore con i parametri.
Questo perchè una classe bean viene tipicamente istanziata tramite la Reflection, cioè utilizzando il metodo "newInstance" che invoca il costruttore vuoto della classe, e poi invoca i setter di tutti i campi dichiarati: quindi significa che eventuali controlli effettuati nel / nei costruttore / i con parametri sarebbero di fatto ignorati in questo caso.
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: May 2004
Messaggi: 1136
|
Ok, grazie ancora.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:56.



















