Newsgroup: it.comp.java
Titolo: Aiutatemi a capire Java...

Mi avete consigliato ovviamente di leggere i manuali e lo sto facendo,
magari con un vostro piccolo aiuto...
*** Ho una classe che non e' nient'altro che una lista, con valori
predefiniti:
- - - - - - - - - -
package preference;
import java.io.*;
import java.util.ArrayList;
public class tupleInput {
 ArrayList lst = new ArrayList();
 public tupleInput() {
  lst.add("t0");
  lst.add("t1");
  lst.add("t2");
  lst.add("t3");
  lst.add("t4");
  lst.add("t5");
  lst.add("t6");
 }
}
- - - - - - - - - -
***In un'altra classe ne creo un istanza, che dovrebbe popolare una
LinkedList:
- - - - - - - - - -
package preference;
import java.io.*;
import java.util.ArrayList;
import java.util.LinkedList;
import preference.tupleInput;
public class tupleC {
 public static void main(String args[]) {
  tupleInput alst = new tupleInput();
  LinkedList lst = new LinkedList();
  lst.addAll(alst);
  System.out.println(alst);
 }
}
- - - - - - - - - -
*****Come mai non funziona la cosa... l'oggetto tupleInput non va bene per
addAll, ma se fosse stato un'ArrayList sarebbe stata a posto!
Per favore fatemi capire quello che non riesco a capire, e che per voi e'
sicuramente banale.
Grazie.

 addAll, ma se fosse stato un'ArrayList sarebbe stata a posto!
Ti sei risposto da solo, te ne rendi conto? :P
addAll non funziona perche' tu non gli passi un oggetto del tipo che si 
aspetta. Per usare una addAll, dovrai aggiungere a tupleInput un metodo 
getArrayList() che ritorna l'ArrayList al suo interno, e poi 
lst.addAll(alst.getArrayList()).
PS: i nomi di classe, per convenzione, vanno con la maiuscola.
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */

> Ti sei risposto da solo, te ne rendi conto? :P
Ho modificato come segue... ma quando nel main della seconda classe stampo
le liste lst e alst sono entrambe vuote... puoi aiutarmi? Grazie!!!
- - - - - - - - - -
package preference;
import java.io.*;
import java.util.ArrayList;
public class TupleInput extends ArrayList {
 ArrayList lst = new ArrayList();
 public TupleInput() {
  lst.add("t0");
  lst.add("t1");
  lst.add("t2");
  lst.add("t3");
  lst.add("t4");
  lst.add("t5");
  lst.add("t6");
 }
 public ArrayList getArrayTupleInput() {
  ArrayList alst = new ArrayList();
  for (int i=0;i<this.size();i++) {
   alst.add(this.get(i));
//   System.out.println(alst.get(i));
  }
  return alst;
 }
}
- - - - - - - - - -
- - - - - - - - - -
package preference;
import java.io.*;
import java.util.ArrayList;
import java.util.LinkedList;
import preference.TupleInput;
public class TupleC {
 public static void main(String args[]) {
  TupleInput alst = new TupleInput();
  LinkedList lst = new LinkedList();
  lst.addAll(alst.getArrayTupleInput());
  System.out.println(lst);
  System.out.println(alst);
 }
}
- - - - - - - - - -
~~~~~~~~~~
Last visited link:
www.rivistaonline.com

    alst.add(this.get(i));
||ERRORE!||
*this* restituisce un riferimento all'istanza corrente di TupleInput, cioè
punta all'oggetto su cui verrà invocato il metodo
quindi this.get(i) non restituisce l'elemento di *lst* dichiarato e
"popolato" nel costruttore, bensi cerca di estrarre elementi dall'istanza di
TupleInput che
ovviamente è vuoto, quindi, o elimini totalmente l'oggetto referenziato da
*lst* (non lo istanzi e non lo usi) e quindi nel costruttore scriverai
this.add("t1");...;this.add("t<n>");
oppure nel for su scritto non usi this ma...questo lo devi dire tu, non
posso darti troppe soluzioni...dovere dell'NG ;)
Bye

 posso darti troppe soluzioni...dovere dell'NG ;)
Cattivo ;-D
E' giusto non dare la pappa pronta (= codice), altrimenti questo 
diventerebbe un luogo di incontro per programmatori che hanno voglia di 
scrivere roba gratis per altri (???), pero' potevi concludere... :)


 posso darti troppe soluzioni...dovere dell'NG ;)
Non posso che scrivere "lst" direi...
Il motivo di quel this effettivamente e' piu' il fatto di aver dimenticato
di correggerlo dopo aver modificato il codice.
Vi ringrazio per lo spirito dell'aiuto nel senso che devo arrivarci da
solo... purtroppo ho fin troppe lacune nei concetti del linguaggio...
Solo 1 cosa pero'... potete spiegarmi perche' quando con lo stesso codice
stampo "lst" (nel main dove lst.addAll(alst....)) la lista e' corretta, e se
stampo "alst" (nello stesso main) ho lista vuota?!?
Grazie a tutti!

 scrivere roba gratis per altri (???), pero' potevi concludere... :)
La conclusione è nel finalize( )  :)

> invece alst:
Grazie mi hai dato modo di rispondermi alla successiva domanda che vi avrei
fatto... perche' nel main non funziona alst.clear() (ad es.), e come dicevo
la risposta sta in quello che mi hai spiegato.
Ora ho riscritto con "this", ma forse per capire bene dovrei provare anche
la con la classe che non estende, e che abbia lista e costruttore...
concettualmente cosa cambierebbe?
Ok ok... vado a provare! ;o)
Grazie, e ai prossimi intoppi che incontrero'... credo presto!
~~~~~~~~~~
Last visited link:
http://ww.rivistaonline.com/PrimoPiano.aspx