 |
AppletTalk.com Java discussions newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
theLuke Guest
|
Posted: Tue Jun 28, 2005 3:10 pm Post subject: Assegnazione dinamica di oggetti |
|
|
Ciao a tutto il NG,
ho un problema che riguarda il casting di oggetti e loro assegnamento.
Mi spiego. Nel mio codice ho due dati:
- Object contenente un oggetto (nativo del JDK o custom)
- String contenente il tipo di oggetto specifico (quello del punto
precedente per intenderci "String", "Float", "Exception"..).
Devo ricreare questi oggetti. Ho pensato alla reflection e, utilizzando il
metodo forName della classe Class ottengo un oggetto che poi "casto"
utilizzando il metodo cast(). Tutto ok, ma ora come posso assegnare in
maniera dinamica questo oggetto castato ad un riferimento del tipo
corretto?
Esempio:
Ho un Object pippo che contiente un riferimento ad una stringa;
Ho una stringa (String valueType) con valore "java.lang.String" (l'esatto
tipo di pippo);
Class c = Class.forName(valueType);
c.cast(pippo);
ora come assegno questo risultato ad un oggetto specifico (nel mio caso
String).
Tutto questo perchè devo richiamare dei metodi in maniera dinamica
passando questi oggetti.
Ho provato a fare anche questo:
nomeMetodoCheAccettaStringComeParametro((c.getClass())pippo);
quindi a effettuare un cast di pippo in maniera dinamica ma non ha
funzionato.
So che la domanda è un po' incasinata e forse non sono stato molto chiaro,
ma ringrazio davvero tutti quelli che mi daranno una mano!!
Grazie a tutti
Luca
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad [email]abuse (AT) newsland (DOT) it[/email]
|
|
| Back to top |
|
 |
{2Nd+BESt} Guest
|
Posted: Tue Jun 28, 2005 5:00 pm Post subject: Re: Assegnazione dinamica di oggetti |
|
|
non so se ho capito,
ma potrebbe tornarti utile la parola chiave instanceof
che ti permette di stabilire il tipo di oggetto.
Es:
class Perepe{
...
}
in un metodo avendo un oggetto particolare
puoi verificare per esempio
Object pOggetto = new Perepe(...);
if (pOggetto instanceof Perepe)
{
Perepe tmp = (Perepe)pOggetto;
}
....
ecc ecc
--
{2Nd+BESt}
-----------------------------------
never underestimate human stupidity
|
|
| Back to top |
|
 |
theLuke Guest
|
Posted: Tue Jun 28, 2005 5:16 pm Post subject: Re: Assegnazione dinamica di oggetti |
|
|
{2Nd+BESt} ha scritto:
| Quote: | non so se ho capito,
ma potrebbe tornarti utile la parola chiave instanceof
[CUT] |
| Quote: | Object pOggetto = new Perepe(...);
if (pOggetto instanceof Perepe)
{
Perepe tmp = (Perepe)pOggetto;
}
|
Non credo...perchè io non so nemmeno che esiste la classe Perepe!!
Io ricevo un oggetto che potrebbe essere....qualunque cosa e il nome di un
metodo che riceve come parametro quell'oggetto "qualunqe cosa"...lo scopo
è quello di chiamare questo metodo passandogli questo oggetto.
Cmq grazie infinite per l'intervento!!
Ciao
Luca
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad [email]abuse (AT) newsland (DOT) it[/email]
|
|
| Back to top |
|
 |
Ferreri Gabriele Guest
|
Posted: Wed Jun 29, 2005 7:03 am Post subject: Re: Assegnazione dinamica di oggetti |
|
|
Forse è una cosa stupida, ma perchè invece di tutto questo non passi al
metodo un Object e poi il metodo si occupa di fare il Cast???
"theLuke" <fafiox (AT) libero (DOT) it> ha scritto nel messaggio
news:d9s0kl$img$1 (AT) news (DOT) newsland.it...
| Quote: | {2Nd+BESt} ha scritto:
non so se ho capito,
ma potrebbe tornarti utile la parola chiave instanceof
[CUT]
Object pOggetto = new Perepe(...);
if (pOggetto instanceof Perepe)
{
Perepe tmp = (Perepe)pOggetto;
}
Non credo...perchè io non so nemmeno che esiste la classe Perepe!!
Io ricevo un oggetto che potrebbe essere....qualunque cosa e il nome di un
metodo che riceve come parametro quell'oggetto "qualunqe cosa"...lo scopo
è quello di chiamare questo metodo passandogli questo oggetto.
Cmq grazie infinite per l'intervento!!
Ciao
Luca
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad [email]abuse (AT) newsland (DOT) it[/email]
|
|
|
| Back to top |
|
 |
iomcenter-giginus@yahoo.i Guest
|
Posted: Wed Jun 29, 2005 7:26 am Post subject: Re: Assegnazione dinamica di oggetti |
|
|
Cioe' se ho capito, tu vorresti fare una 'roba' del genere:?
String tipo = "java.lang.Integer";
Object intero = new Integer(4);
tipo nuovoOggetto = (tipo)intero;
Ho capito il tuo pensiero?
Ovvero vuoi che il cast e la tipizzazione della variabile siano
dinamici?
Beh, in java non e' possibile, il compilatore <deve> sapere esattamente
di che tipo (o classe) è una variabile a tempo di compilazione, e se
tu che scrivi il codice non lo puoi sapere allora devi dichiararla
Object.
Qualcosa di simile lo puoi fare con instanceof, oppure con la
reflection, ma allora devi conoscere anche i nomi dei metodi da
chiamare sull'oggetto e la lista dei parametri.
Es:
String tipo = "java.util.ArrayList";
Object obj = new ArrayList();
String metodo = "add";
Object[] listaParametri = {"abc"};
if(obj.getClass().getName().equals(tipo)){
Method m = obj.getClass().getMethod(metodo);
m.invoke(obj,listaParametri);
}
Anche se bisognerebbe capire perche' devi incasinarti cosi' la vita....
}
|
|
| Back to top |
|
 |
theLuke Guest
|
Posted: Wed Jun 29, 2005 11:48 am Post subject: Re: Assegnazione dinamica di oggetti |
|
|
[email]iomcenter-giginus (AT) yahoo (DOT) it[/email] ha scritto:
| Quote: | Cioe' se ho capito, tu vorresti fare una 'roba' del genere:?
String tipo = "java.lang.Integer";
Object intero = new Integer(4);
tipo nuovoOggetto = (tipo)intero;
Ho capito il tuo pensiero?
[CUT] |
Sì, hai centrato esattamente il problema!
| Quote: | Beh, in java non e' possibile, il compilatore <deve> sapere esattamente
[CUT] |
...lo temevo!!
| Quote: | Qualcosa di simile lo puoi fare con instanceof, oppure con la
reflection, ma allora devi conoscere anche i nomi dei metodi da
chiamare sull'oggetto e la lista dei parametri.
[CUT]
Anche se bisognerebbe capire perche' devi incasinarti cosi' la vita....
|
eheh...hai PERFETTAMENTE ragione! Il problema è che devo effettuare il
wrapping di una "cosa" non sviluppata da me e soprattutto sviluppata (non
voglio peccare di presunzione) in maniera non molto pulita e ordinata.
Insomma...devo mettere mano a codice non mio, cercare di wrapparlo in
un'architettura più scalabile e visto che le tempistiche , come sempre,
sono strettissime, non c'è possibilità almeno per i primi rilasci di
riscrivere il codice "incriminato".
Cmq, grazie davvero per il tuo intervento, malgrado le brutte notizie mi
ha dato una delucidazione...NON SI PUO' FARE!
Ciao e grazie ancora
Luca
--
questo articolo e` stato inviato via web dal servizio gratuito
http://www.newsland.it/news segnala gli abusi ad [email]abuse (AT) newsland (DOT) it[/email]
|
|
| Back to top |
|
 |
iomcenter-giginus@yahoo.i Guest
|
Posted: Wed Jun 29, 2005 4:01 pm Post subject: Re: Assegnazione dinamica di oggetti |
|
|
Ovviamente dato che non so precisamente com'e' la situazione potrebbe
darsi che quello che ti diro'...
a) non serve
b) ci hai gia' pensato e l'hai scartato...
pero'
Non potresti creare una serie di interfacce che espongono i metodi che
vuoi "wrappare",
poi per quanto riguarda l'implementazione ti fai delle classi che
implementano tali interfacce e che nascondono al loro interno tutto il
porcaio necessario (magari anche serie giganti di if(instanceof...)).
E decidere a runtime quale classe usare di volta in volta
tipo:
interface WrapInterface{
public int metodoDaEsporre(int a,string b,ArrayList c);
etc.
}
public class WrapImpl_1 implements WrapInterface{....}
public class WrapImpl_2 implements WrapInterface{....}
e poi nel codice
string classeDaUsare = "WrapImpl_1";
WrapInterface i =
(WrapInterface)Class.forName(classeDaUsare).newInstance();
i.metodoDaEsporre(....)
e a questo punto hai a compile time il type checking sui parametri in
ingresso e in uscita dei metodi...
Io ho detto..
poi magari non si applica al tuo caso...
|
|
| Back to top |
|
 |
{2Nd+BESt} Guest
|
Posted: Thu Jun 30, 2005 9:55 am Post subject: Re: Assegnazione dinamica di oggetti |
|
|
e provare a tirare in ballo il ClassLoader, o meglio
crearti una classe che estende/implementa il ClassLoader,
o solamente vedere se e' possibile lavorarci su?
non so dirti di piu',
prova a studiarlo un po....
--
{2Nd+BESt}
-----------------------------------
never underestimate human stupidity
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|