|
|||||||
|
|
|
![]() |
|
|
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 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / 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: 22:27.


















