Newsgroup: it.comp.java
Titolo: Eccezioni in java...

In java si possono sollevare delle eccezioni senza bisogno di utilizzare la
struttura try-catch. Un esempio e' questo codice:
<code>
public static void main(String[] argv) {
	MyObject obj = null;
	obj.metodo();
}
</code>
In questo caso, a tempo di esecuzione, viene sollevata una eccezione
NullPointerException.
Posso creare, ad esempio, una MyNullPointerException in modo che cerchi
sempre una eccezione senza uilizzare un codice come questo:
<code>
public static void main(String[] argv) throws MyNullPointerException {
	MyObject obj = null;
	try {
		obj.metodo();
	} catch(MyNullPointerException e) {}
}
</code>
Ovvero *senza* mettere il "throws MyNullPointerException" nella
dichiarazione del metodo?
Grazie.
-- 
Marco "Duff" Palermo
http://www.marcoduff.com/

MarcoDuff wrote:

Ciao,
non sono sicurissimo di aver capito cosa intendi ma mi sembra che fai confusione 
  sul utilizzo della clausola throws.
throws serve per rilanciare l'eccezione a chi invoca il metodo. Se gestisci 
l'eccezione all'interno del metodo e non ne sollevi nessun'altra č inutile 
rilanciare l'eccezione.
Per il tuo esempio, si, č possibile, basta togliere
   throws MyNullPointerException
:)
Marco
Marco
-- 
reply: remove .duh.spam
http://javac.imap.cc

   sul utilizzo della clausola throws.
[CUT]
Hai ragione, ho riletto il mio post! Errore mio di copia ed incolla!
Mi sono spiegato malissimo scrivendo anche cose sbagliate!!!
Ci riprovo:
Il mio problema e' il seguente: voglio creare una mia eccezione. Ad
esempio:
public class MyException extend Exception {
	public MyException() {super();}
}
Adesso voglio che questa eccezione sia catturata *ovunque* nel mio codice,
proprio come fa NullPointerException.
In un codice di questo tipo:
public static void main(String argv[]) {
	MyObject obj = null;
	obj.metodo();
}
A *tempo di esecuzione* viene sollevata una eccezione NullPointerException,
giusto?
Adesso supponiamo di avere questo codice:
public static void main(String argv[]) {
	MyObject obj1 = new MyObject();
	MyObject obj2 = new MyObject();
 
	obj1 = obj2;
}
Io voglio che a tempo di esecuzione questo codice sollevi la MyException
perche' non voglio che sia possibile utilizzare l'operatore = per gli
oggetti di tipo MyObject.
E' possibile?
Grazie!


 E' possibile?
Questo e' un caso particolare perche' dovresti sovraccaricare l'operatore =
per i tuoi oggetti; sinceramente in java non so
se questo sia possibile...
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 E' possibile?
Per l'eccezione ha gia risposto Valerio; per sollevarla quando fai 
l'assegnazione... non credo proprio sia possibile...
Se posso, perchč vuoi vietarlo?
Ciao


 Se posso, perchè vuoi vietarlo?
Perche' voglio evitare la copia di un oggetto. O meglio, voglio che questa
sia fatta esclusivamente tramite un metodo che potrebbe essere ad esempio:
public MyObject getObjectCopy() {}
Mi spiego meglio con un esempio:
public class Dummy {
	private Vector v;
	public Vector getV() {
		// DA RIEMPIRE
	}
}
Il codice e' molto diverso se il contenuto di getV() e'
return v;
oppure 
return v.clone();
L'operatore = verrebbe a essere molto simile a "return v;", ma io voglio
che l'operatore = sia un "return v.clone();".
Siccome non posso fare un overloading, voglio sollevare una eccezione
quando si utilizza l'operatore = nella classe MyObject.
Avevo gia' preso informazioni, e so che Java e' limitato sottoquesto punto
di vista, diciamo che quando e' partito questo post gia' sapevo di non
avere speranze...
Ma mi fido del NG ed un tentativo l'ho voluto fare!


 se questo sia possibile...
Infatti e' proprio qui il problema, siccome non posso sovraccaricare
l'operatore, volevo vedere se potevo almento sollevare una eccezione...


 l'operatore, volevo vedere se potevo almento sollevare una eccezione...
Il problema è che non c'è verso di avere un "aggancio" per sapere quando viene 
fatta l'assegnazione e dunque anche sollevare un eccezione non ti serve...


 
Capisco, bhe, l'unico suggerimento che posso darti è che se un programmatore che 
utilizzara il tuo MyObject pensa di ricevere una *copia* dell'oggetto 
utilizzando = non bisogna fare l'overloading dell'operatore ma del 
programmatore... ;)


 di eccezioni di tipo implicito.
Estendi RuntimeException. O forse capisco male anch'io :-)
-- 
You dont know what to do when you dont know what you're doing.
http://space.tin.it/computer/csadun

 Perche' voglio evitare la copia di un oggetto
Quello di cui fai copia nel tuo esempio e' un riferimento ad un oggetto, 
non l'oggetto. Siccome l'rvalue dell'assegnamento nulla sa del fatto che, 
appunto, e' in un'espressione di assegnamento, ne segue che non c'e modo,
dall'oggetto costruito, di sollevare nulla.
Se proprio ti serve una cosa del genere (ma non mi pare abbia molto senso: 
se il codice client non sa se vuole fare una copia di un oggetto o copiare 
il riferimento, e' codice povero assai :-) puoi provare a usare aspetti, e 
instrumentare (argh :) il codice in modo opportuno.


 instrumentare (argh :) il codice in modo opportuno.
Humz... uh? Cosa significa? :)


 
Che puoi intervenire su metodi e oggetti in post-produzione del codice: 
controlli come quello che l'autore del post originale ipotizzava si possono 
talvolta fare, "instrumentando" per esempio chiamate di metodo e/o 
definendo proprieta' trasversali (aspetti) cioe' non dipendenti dall'object 
model in se'. 
Un'implementazione per java e' AspectJ (ce n'e' anche un'altra con un 
concetto di aspect leggermente diverso, credo, ma non l'ho mai usata :-).


 
Denghiů, č la prima volta che sento menzionare questo argomento.
Marco


 concetto di aspect leggermente diverso, credo, ma non l'ho mai usata :-).
Mmmm... Post-produzione...
Non ci avevo pensato, ma sarebbe una cosa troppo complicata a farsi...
Specialmente in un progetto open-source a disposizione di tutti e
modificabile da tutti... Comunque grazie per l'idea...
Ma in ogni caso (e qui adesso mi arrivano parolaccie!) quello che volevo
fare (l'eccezione sollevata da un operatore) era un discorso del tutto
teorico per affrontare uno dei temi "limitati" di Java: gli operatori. Piu'
che altro volevo sapere se qualcuno era riuscito (con programmazione "non
standard") a fare qualche cosa di piu' con gli operatori per imparare
qualche tecnica nuova.
Grazie per l'aiuto!



Infatti per questo motivo volevo *evitare* l'operatore =, non fare
l'overloading!
Gia' mi immagino le public class MyClass extends MarcoDuff!!! :))))


 Estendi RuntimeException. O forse capisco male anch'io :-)
No, capite bene sia tu che cthulhu (vi ringrazio tutti e due)!
Il problema e' quello che voglio fare e' impossibile da fare! :)
L'esempio di cthulhu mette in evidenza il fatto che se estendo l'eccezione
a RuntimeException, la mia eccezione diventa di tipo implicito, ma per
beccare una operazione tramite operatore (arrivato ad un certo punto,
qualunque operatore, non solo l'uguale) nulla da fare!
Grazie!
