View Full Version : [JAVA] Tipo di variabile
come faccio a capire il tipo di variabile...nel senso ho un array di parametri di vario tipo........
il mio problema è che devo controllare di che tipo sono (ci sono date, interi , lon.....ecc)?!!!
:muro:
Originariamente inviato da petitof
come faccio a capire il tipo di variabile...nel senso ho un array di parametri di vario tipo........
il mio problema è che devo controllare di che tipo sono (ci sono date, interi , lon.....ecc)?!!!
:muro:
un array ha specificato in se stesso il tipo di oggetti che contiene...
a meno che non sia un'array di Object :what:
Starà parlando di un Vector, un po' di fantasia ;)
object.getClass().getName()
se invece ti serve a runtime testare il tipo di un oggetto puoi usare l'operatore instanceof
if(object instanceof ....)
else if (object instanceof ....) ....
leomagic
17-06-2004, 15:22
prenditi il dato è vedi quanto spazio occupa in memoria!
io aho un array
String parametri[];
poi eseguo lo split di alcuni parametri di una query sql stringa...Es: ..25,'ciao',2900000 ...
in modo tale da avere
parametri [0] = 25
parametri [1] = 'ciao'
parametri [2] = 2900000
non so come fare...
Ed_Bunker
17-06-2004, 16:57
Originariamente inviato da petitof
io aho un array
String parametri[];
poi eseguo lo split di alcuni parametri di una query sql stringa...Es: ..25,'ciao',2900000 ...
in modo tale da avere
parametri [0] = 25
parametri [1] = 'ciao'
parametri [2] = 2900000
non so come fare...
Perche' non usi un Vector (Anziche' l'array) ed inserisci oggetti?
Potresti cosi' inserire:
String, Integer o qualsiasi nuovo TDA da te appositamente creato, in modo da poter, di volta in volta, riconoscere il tipo dell'oggetto contenuto nel Vector facendo un semplice instanceof ?!?
Senza stare a incasinarti se il tuo scopo è quello di distinguere se una stringa è un numero usa il metodo
try
{
int numero = Integer.parseInt(tuaStringa);
}
catch (NumberFormatException e)
{
....//se sei qui non è un numero...
}
Ed_Bunker
17-06-2004, 20:34
Originariamente inviato da cn73
Senza stare a incasinarti se il tuo scopo è quello di distinguere se una stringa è un numero usa il metodo
try
{
int numero = Integer.parseInt(tuaStringa);
}
catch (NumberFormatException e)
{
....//se sei qui non è un numero...
}
Gestione eccezione incontrollata...
Caro cn, altro che un po' di fantasia, qui ci vorrebbero gli aruspici (gente che leggeva il futuro nelle evoluzioni dei volatili).
ED_bunker è lapidario con la "gestione delle eccezioni non controllate". Suppongo lo segnali come pessimo stile ("bad practice" direbbero gli assuefatti all'oltremanica), ma non lo è.
Per due ragioni. Primo, perchè il fatto che taluni eventi siano segnati come eccezioni che possono anche non essere intercettate non significa che non debbano (o possano) mai esserlo. Secondo, perchè dell'eccezione cn usa un "effetto" (il trasferimento del controllo di esecuzione al blocco catch), schivando il fatto che le eccezioni dovrebbero segnalare solo eventi catastrofali: quest'ultima è per altro una linea guida più che una regola, a volte la si può ignorare, sempre nel caso in cui il codice ne risulti estremamente più sempice.
Il problema è che in questo caso il codice non salta fuori più semplice.
parseInt genera un'eccezione NumberFormatException anche nel caso in cui la stringa rappresenti un numero decimale o sovrabbondante per il formato intero a 32 bit. Il blocco try - catch dovrebbe quindi diventare una serie di try - catch annidati (dal piccolo al grande, per due volte).
int
long
float
double
"se po' fa'" ma forse viene fuori un mostriciattolo.
Torniamo a petitof che, dopo aver fatto "split di alcuni parametri di una query sql stringa" si ritrova con un array di oggetti String.
Quello che serve è un oggetto che sia in grado di determinare, data una stringa "s", se il testo in esso contenuto sia convertibile in un valore valido per la costruzione di un oggetto di tipo
Integer
Long
Double
Date
Float
[...altro]
conviene usare i contenitori per i primitivi perchè, come sottolinea Ed_Bunker, puoi infilarli tutti quanti in un'unica lista. Potresti anche usare un array di Object (mi sembra che tu conosca a priori le dimensioni che dovrebbe avere), ma le liste sono enormemente più flessibili (e nel caso di liste basate su array, come ArrayList, di poco meno rapide).
Come fare è interessante. La puoi pigliare in mille modi, se ho azzeccato la questione ci si può fare un pensierino. L'accendiamo?
Ciao.
Ed_Bunker
19-06-2004, 11:50
Originariamente inviato da PGI
Caro cn, altro che un po' di fantasia, qui ci vorrebbero gli aruspici (gente che leggeva il futuro nelle evoluzioni dei volatili).
ED_bunker è lapidario con la "gestione delle eccezioni non controllate". Suppongo lo segnali come pessimo stile ("bad practice" direbbero gli assuefatti all'oltremanica), ma non lo è.
Per due ragioni. Primo, perchè il fatto che taluni eventi siano segnati come eccezioni che possono anche non essere intercettate non significa che non debbano (o possano) mai esserlo. Secondo, perchè dell'eccezione cn usa un "effetto" (il trasferimento del controllo di esecuzione al blocco catch), schivando il fatto che le eccezioni dovrebbero segnalare solo eventi catastrofali: quest'ultima è per altro una linea guida più che una regola, a volte la si può ignorare, sempre nel caso in cui il codice ne risulti estremamente più sempice.
Il problema è che in questo caso il codice non salta fuori più semplice.
parseInt genera un'eccezione NumberFormatException anche nel caso in cui la stringa rappresenti un numero decimale o sovrabbondante per il formato intero a 32 bit. Il blocco try - catch dovrebbe quindi diventare una serie di try - catch annidati (dal piccolo al grande, per due volte).
int
long
float
double
"se po' fa'" ma forse viene fuori un mostriciattolo.
Torniamo a petitof che, dopo aver fatto "split di alcuni parametri di una query sql stringa" si ritrova con un array di oggetti String.
Quello che serve è un oggetto che sia in grado di determinare, data una stringa "s", se il testo in esso contenuto sia convertibile in un valore valido per la costruzione di un oggetto di tipo
Integer
Long
Double
Date
Float
[...altro]
conviene usare i contenitori per i primitivi perchè, come sottolinea Ed_Bunker, puoi infilarli tutti quanti in un'unica lista. Potresti anche usare un array di Object (mi sembra che tu conosca a priori le dimensioni che dovrebbe avere), ma le liste sono enormemente più flessibili (e nel caso di liste basate su array, come ArrayList, di poco meno rapide).
Come fare è interessante. La puoi pigliare in mille modi, se ho azzeccato la questione ci si può fare un pensierino. L'accendiamo?
Ciao.
Non penso che sia "pessimo stile" ma, in questo caso, il catturare e gestire esplicitamente una NumberFormatException non risolve per nulla le cose visto che, nel caso un NFE venga catturata, saprei soltanto di non avere a che fare con un numero intero (Poiche' per i decimali...) senza pero' capire cosa sia realmente l' "oggetto" (Una data ?! Altro ?!). Pertanto le cose si complicherebbero ulteriormente. Utilizzando invece una struttura che contenga oggetti (Un array di Object, un Vector o una List, come da te suggerito) (Sui quali fare il casting, dopo un controllo che individui il tipo effettivo del dato in questione) le cose si semplificano e appaiono molto piu' "pulite".
Ciao.
Il suo problema è distingere numeri da altro. Se questo è il suo problema la soluzione prenetata è ottimale. Se non ha solo degli Integer, può usare ad esempio i metodi della classe Long o Double.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.