PDA

View Full Version : [JAVA] Reperire un oggetto creato in un'altra classe


e-commerce84
09-03-2011, 11:55
Ciao,
ho un problema probabilmente molto banale...è un po' di tempo che non programmo in Java ed evidentemente sono un po' arruginito...

Allora ho questa classe chiamata PopolaTabella in cui sempmlicemente creo e popolo un oggetto di tipo Collection chiamato elenco.
In tale classe è dichiarato il metodo getElenco() che ritorna il riferimento a tale oggetto elenco.


package managedBean;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import com.icesoft.faces.component.ext.RowSelectorEvent;

public class PopolaTabella {

PortafoglioCliente portafoglio;

Collection elenco = new ArrayList();

public PopolaTabella() {
portafoglio = new PortafoglioCliente();
portafoglio.setTipoElemento("Paperino");
portafoglio.setCodiceRapporto(11);
portafoglio.setNumeroPolizza("Topolino");
portafoglio.setDescrizioneProdotto("Pluto");
portafoglio.setDescrizioneOggetto("Pippo");
portafoglio.setCodiceStato("Paperone");
portafoglio.setDataEffetto(new Date());
portafoglio.setDataScadenza(new Date());
portafoglio.setPremioLordoAnnuo(BigDecimal.valueOf(2546545.778675));

elenco.add(portafoglio);
System.out.println("COSTRUTTORE");
}

public Collection getElenco() {
return elenco;
}

public void setElenco(Collection elenco) {
this.elenco = elenco;
}

public void rowSelector(RowSelectorEvent event){
System.out.println("RowSelector");
}

public String testAction(){
System.out.println("ACTION");
return null;
}

}


Poi ho una seconsa classe chiamata OperazioniTabella che deve recuperare l'oggetto elenco creato e popolato nella classe PopolaTabella e farci delle operazioni sopra che devo ancora definire...

Sostanzialmente io ho scritto così:


package managedBean;

import java.util.ArrayList;
import java.util.Collection;
import managedBean.PopolaTabella;

public class OperazioniTabella {

Collection elenco = new ArrayList();

public OperazioniTabella(){
elenco = PopolaTabella.getElenco();

}

}


Dichiaro un nuovo oggetto elenco di tipo Collection e lo costruisco. poi nel costruttore di tale classe faccio in modo che dentro elenco ci sia il riferimento all'oggetto precedentemente creato nella classe PopolaTabella...ma...Eclipse mi segna errore e dice che devo far diventare statico il metodo getElenco()...

Perchè ?!?! Cosa c'è che non và tenendolo non statico ?!?! Ho organizzato male la mia archietettura delle classi?

Sostanzialmente l'applicazione dovrebbe funzionare così: la classe PopolaTabella mi riempie una tabella (in questo caso con una riga sola rappresentata dall'oggetto portafoglio, ogni campo di portafoglio rappresenta il valore di una colonna della tabella) ed un'altra tabella OperazioniTabella che si recupera la Collection rappresentante tutti i record della tabella e li và a modificare

Please, help me

Grazie

banryu79
09-03-2011, 12:00
Mi sa che sei sì un tantino arruginito :D

Devi avere sottomano un'istanza di PopolaTabella, se vuoi invocare un metodo di istanza di quella classe:

PopolaTabella pop = new PopolaTabella();

Quindi invochi getElenco() sulla tua istanza pop...

e-commerce84
09-03-2011, 12:12
Mi sa che sei sì un tantino arruginito :D

Devi avere sottomano un'istanza di PopolaTabella, se vuoi invocare un metodo di istanza di quella classe:

PopolaTabella pop = new PopolaTabella();

Quindi invochi getElenco() sulla tua istanza pop...

Ok...questo non è essere arruginiti...è essere rincojoniti !!!

Grazie....ti spiego meglio la situazione così magari mi eviti di fare cavolate e di scrivere codice inutile...

Ho la classe PopolaTabella che contiene una collezione di oggeti PortafoglioCliente (al momento uno solo). Ogni oggetto in tale collezione rappresenta una riga di una tabella (i campi dell'oggetto rappresentano le colonne della tabella). Quindi al momento ho una tabella contenente una sola riga.
(Il motivo per cui uso una Collection di oggetti per rappresentare una tabella è semplice, uso IceFaces per visualizzare la tabella ed in IceFaces si fà così :D )

Ora per ogni riga della tabella devo prevedere una serie di operazioni (non sò ancora quali...me lo devono ancora dire). Una modifica su un campo della tabella di fatto consiste nel modificare un campo di un'oggetto di tale collezione.

Secondo te tali operazioni mi conviene implementarle direttamente dentro la classe PopolaTabella o come stò facendo in un'altra classe OperazioniTabella che si và a reperire la collezione e ci opera sopra?

Tnx

banryu79
09-03-2011, 12:26
(Il motivo per cui uso una Collection di oggetti per rappresentare una tabella è semplice, uso IceFaces per visualizzare la tabella ed in IceFaces si fà così :D)

Non conosco IceFaces, ma posso capire la neccessità di rappresentare una tabella come una collezione di "value objects".


Ora per ogni riga della tabella devo prevedere una serie di operazioni (non sò ancora quali...me lo devono ancora dire). Una modifica su un campo della tabella di fatto consiste nel modificare un campo di un'oggetto di tale collezione.

Se per ogni riga della tabella devi prevedere una serie di operazioni, ed una riga della tabella è rappresentabile con un istanza di PortafoglioCliente, allora è come dire che ci saranno delle operazioni da eseguire su un PortafoglioCliente.


Secondo te tali operazioni mi conviene implementarle direttamente dentro la classe PopolaTabella o come stò facendo in un'altra classe OperazioniTabella che si và a reperire la collezione e ci opera sopra?

Posto che i nomi delle classi PopolaTabella ed OperazioniTabella sembravo significare delle azioni (popola, una azione specifica) e un oggetto/ente (operazioni, una raccolta di azioni) direi che la risposta alla tua domanda è un bel: dipende. Dipende dal resto dello scenario in cui ti trovi ad operarare, e che non sono in grado di valutare.
Ammettendo poi che, conoscendolo, io sia in grado di farlo :asd:

e-commerce84
09-03-2011, 12:33
Forse sei riuscito ad illuminarmi (madonna santa...ho studiato Java all'uni e dopo un anno che non lo tocco sono proprio messo male...)

Allora si, una riga della tabella rappresenta un'istanza di un oggetto avente tipo PortafoglioCliente, quindi i metodi che rappresentano le operazioni di modifica li vado a mettere proprio dentro la classe PortafoglioCliente perchè di fatto devono modificare un campo di un oggetto di questo tipo...quindi quì più che in altre classi o in PopolaTabella...giusto?

concordo che i nomi delle classi siano orrendi, dovrò fare un po' di refactoring...

IceFaces è un framework di presentazione per sviluppare applicazioni web RIA :)

Grazie

banryu79
09-03-2011, 12:48
Allora si, una riga della tabella rappresenta un'istanza di un oggetto avente tipo PortafoglioCliente, quindi i metodi che rappresentano le operazioni di modifica li vado a mettere proprio dentro la classe PortafoglioCliente perchè di fatto devono modificare un campo di un oggetto di questo tipo...quindi quì più che in altre classi o in PopolaTabella...giusto?

E' il ragionamento che ho fatto io, senza considerare altre relazioni/interazioni con l'ambiente in cui si trova, sapendo solo che serve a mappare il contenuto di una riga di una tabella.


concordo che i nomi delle classi siano orrendi, dovrò fare un po' di refactoring...

Però io non ho detto che i nomi sono orrendi.


IceFaces è un framework di presentazione per sviluppare applicazioni web RIA

Bon, lato web non so una ceppa :)