Newsgroup: it.comp.java
Titolo: Passaggio di parametri

Salve a tutti,
ho da poco iniziato a studiare il linguaggio java e ho un problema 
(probabilmente è una banalità, ma non riesco a uscirne).
Vorrei sapere come fare per avere in un metodo un parametro di output.
In pratica, per esercizio, sto cercando di creare una classe Stack, e vorrei 
implementare il metodo Pop in modo che, oltre all'elemento estratto, ritorni 
il numero di elementi rimasti:
ElementiRimasti = MioStack.Pop(ElementoEstratto).
Ho spulciato un po di materiale (di carta e in pdf), ma non si soffermano 
sul passaggio dei parametri, però in tutti gli esempi non usano mai 
parametri di output.
Qualcuno può aiutarmi?
Grazie.
Ciao. 

 parametri di output.
Java gli argomenti li puoi passare solo per valore. Qualcuno magari ti 
ha detto che i tipi primitivi sono passati per valore e gli oggetti per 
riferimento. Ti ha detto una cosa non correttissima ma che rende l'idea.
In Java gli argomenti sono sempre passati per valore, quando credi di 
passare un oggetto in realtà stai passando il riferimento all'oggetto, e 
il riferimento lo stai passando per valore.
Questo implica che se hai:
	extractedElement = null;
	stack.pop(extractedElement);
qualunque cosa faccia il metodo pop() dopo la sua chiamata 
extractedElement punterà sempre a null.
Il modo più semplice per supplire a questa "limitazione" (voluta dai 
progettisti del linguaggio) è quello usare una semantica simile a questa:
 
	extractedElement = stack.pop();
	leftElementCount = stack.size();
In altri casi potresti voler risolvere in modi differenti.
Cmq per illustrarteli uso sempre questo esempio, essendo conscio del 
fatto che in questo caso il modo migliore è quello appena mostrato.
1)
Definendo una classe composita per contenere il risultato.
class PopResult {
   public Object extracted;
   public int count;
}
	PopResult popResult = stack.pop();
	extractedElement = popResult.extracted;
	leftElementCount = popResult.count;
2)
Passando il riferimento ad un oggetto holder:
class Holder<T> {
  T target = null;
}
	Holder<Object> extractedElementHolder = new Holder();
	leftElementCount = stack.pop(extractedElementHolder);
	Object extractedElement = extractedElementHolder.target;
-- 
Andrea Francia
http://andreafrancia.blogspot.com/2008/06/relazioni-molti-molti-con-jpa.html

Salve,
innanzitutto grazie per la tempestività e la chiarezza della risposta.
Però mi pare strano che non sia contemplato il passaggio per riferimento per 
i tipi primitivi.
Vero è che in java sono molto più comuni gli oggetti, ma mi pare comunque 
una grossa limitazione.
Va beh non voglio diventare OT perdendomi in questioni filosofiche.
Ancora grazie.
Ciao. 

 Va beh non voglio diventare OT perdendomi in questioni filosofiche.
Non preoccuparti, finche parli di Java sei IT.


 una grossa limitazione.
in realtà i parametri, in java, vengono *sempre* passati per valore.
anche il passaggio delle istanze di oggetto si traduce in un passaggio 
per valore delle reference, analogamente a quello che avviene in C/C++ 
quando passi i puntatori.
-- 
? Fino all'anno scorso avevo un solo difetto. Ero presuntuoso.
http://softvalley.blogspot.com
http://www.flickr.com/photos/marko_po/

un interessante articolo: 
http://www.yoda.arachsys.com/java/passing.html
r.
PS: spiega anche il motivo