Uso appropriato dei metodi getter e setter

di il
2 risposte

Uso appropriato dei metodi getter e setter

Salve a tutti,

Vorrei porre una domanda abbasta semplice riguardo i metodi getter e setter.
Devo fare un progetto nel quale è neccessaria la realizzazione di una lista della classe Casa.
Quest'ultima al suo interno ha dei campi interi che devono rispettare certe condizioni.
(Per esempio il campo altezza deve neccessariamente contenere un numero positivo)

private int altezza;

public void setAltezza(int value)
{
	if(value > 0)
		this.altezza = value;
}
La creazione dell'istanza la faccio tramite un costruttore che riceve tutti i parametri della classe (non sono molti)

Ora arriva la domanda: come posso evitare la creazione di un istanza nel momento in cui anche un solo campo non venga effettivamente assegnato? (Cioè nel caso in cui non rispetti la condizione del metodo setter)
Io pensavo di fare tutti i metodi setXXX in questo modo:
-
public void setAltezza(int value) throws exception()
{
	if(value > 0)
		this.altezza = value;
	else
		throw new exception()
}
e poi gestire l'eccezione nella classe con il main all'interno di un try-catch.
Potrebbe andare bene come soluzione? Ci sono alternative migliori? Quale sarebbe la classe piu appropriata da usare come eccezione?

P.S. Dato che il metodo setXXX verrebbe richiamato dal costruttore e il costruttore viene chiamato dalla mia classe principale devo far si che anche il costruttore deleghi l'eccezzione, giusto?

2 Risposte

  • Re: Uso appropriato dei metodi getter e setter

    glcbattocchio ha scritto:


    Io pensavo di fare tutti i metodi setXXX in questo modo:
    -
    public void setAltezza(int value) throws exception()
    {
    	if(value > 0)
    		this.altezza = value;
    	else
    		throw new exception()
    }
    
    e poi gestire l'eccezione nella classe con il main all'interno di un try-catch.
    Potrebbe andare bene come soluzione? Ci sono alternative migliori? Quale sarebbe la classe piu appropriata da usare come eccezione?

    P.S. Dato che il metodo setXXX verrebbe richiamato dal costruttore e il costruttore viene chiamato dalla mia classe principale devo far si che anche il costruttore deleghi l'eccezzione, giusto?
    Quando si applica una precondizione di quel tipo ad una proprietà, tipicamente si lancia una eccezione proprio per indicare che il parametro non è appropriato.
    Quale eccezione .... dipende ma tipicamente si sceglie una eccezione "unchecked" (derivante da RuntimeException). In genere, se non ci sono altri requisiti specifici, si usa di norma la java.lang.IllegalArgumentException . Se ci sono motivi validi, si può anche estenderla, ad esempio se il concetto di "altezza non valida" è molto ubiquo all'interno della applicazione perché magari è applicato in svariate classi. Allora si potrebbe estendere IllegalArgumentException per fare una es. AltezzaInvalidaException .

    Ed essendo unchecked, bisogna ricordare che NON c'è alcun obbligo né di dichiararla (con il throws) né di catturarla.
  • Re: Uso appropriato dei metodi getter e setter

    Grazie mille.
    Infatti pensavo di fare così, gestire il problema delegando un eccezione.
    Utile il consiglio della java.lang.IllegalArgumentException
Devi accedere o registrarti per scrivere nel forum
2 risposte