getMethod quando non si conosce il tipo del parametro

1 view
Skip to first unread message

Tiziano Lattisi

unread,
Jan 12, 2012, 6:17:57 AM1/12/12
to jug...@googlegroups.com
Ciao a tutti,

sto cercando la maniera un po' più "intelligente" per ottenere lo
stesso risultato del brutto
codice incollato qui sotto.

object ha un metodo chiamato methodName, ma non so se prende come
parametro un Long o un Integer (ma sicuramente un Number)

C'è un metodo migliore rispetto all'andare per tentativi?

ciao
Tiziano


Method m = null;
try {
m = object.getClass().getMethod(methodName, Long.class);
} catch (NoSuchMethodException ex) {
try {
m = object.getClass().getMethod(methodName, Integer.class);
} catch (NoSuchMethodException ex2) {
// doh!
}
}

Simone Bordet

unread,
Jan 12, 2012, 6:26:09 AM1/12/12
to jug...@googlegroups.com
Ciao,

On Thu, Jan 12, 2012 at 12:17, Tiziano Lattisi
<tiziano...@gmail.com> wrote:
> Ciao a tutti,
>
> sto cercando la maniera un po' più "intelligente" per ottenere lo
> stesso risultato del brutto
> codice incollato qui sotto.
>
> object ha un metodo chiamato methodName, ma non so se prende come
> parametro un Long o un Integer (ma sicuramente un Number)
>
> C'è un metodo migliore rispetto all'andare per tentativi?

No.

Simon
--
http://cometd.org
http://intalio.com
http://bordet.blogspot.com
----
Finally, no matter how good the architecture and design are,
to deliver bug-free software with optimal performance and reliability,
the implementation technique must be flawless.   Victoria Livschitz

Tiziano Lattisi

unread,
Jan 12, 2012, 6:27:06 AM1/12/12
to jug...@googlegroups.com
>> C'è un metodo migliore rispetto all'andare per tentativi?
>
> No.
>
> Simon

Ermetico. :-)

grazie!
t.

Davide

unread,
Jan 12, 2012, 6:29:46 AM1/12/12
to jug...@googlegroups.com
Ciao,

puoi usare il metodo getMethods[] e ciclare fino a che trovi
quello con il tuo nome e poi puoi leggere il tipo di parametro.

Il 12 gennaio 2012 12:27, Tiziano Lattisi <tiziano...@gmail.com>
ha scritto:

> --
> You received this message because you are subscribed to the Google Groups "JUG Trentino Alto Adige Suedtirol" group.
> To post to this group, send email to jug...@googlegroups.com.
> To unsubscribe from this group, send email to jugtaa+un...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/jugtaa?hl=en.
>

--
  _|  _.    o  _|  _
 (_| (_| \/ | (_| (/_

Gianluca Mazzaferro

unread,
Jan 12, 2012, 9:26:17 AM1/12/12
to jug...@googlegroups.com
puoi usare il metodo getMethods[] e ciclare fino a che trovi
quello con il tuo nome e poi puoi leggere il tipo di parametro. 

quoto Davide

2012/1/12 Davide <d...@vide.bz>

Tiziano Lattisi

unread,
Jan 12, 2012, 9:32:38 AM1/12/12
to jug...@googlegroups.com
Non è meno efficace ciclare su un numero di metodi che potrebbe
essere arbitrariamente alto, rispetto a fare due tentativi con getMethod?

Gianluca Mazzaferro

unread,
Jan 12, 2012, 9:36:02 AM1/12/12
to jug...@googlegroups.com
mah.. un ciclo anche lungo eseguito in memoria...non è costoso in termini di performance... 

Michele Lorenzini

unread,
Jan 12, 2012, 9:38:47 AM1/12/12
to jug...@googlegroups.com
2012/1/12 Tiziano Lattisi <tiziano...@gmail.com>

Non è meno efficace ciclare su un numero di metodi che potrebbe
essere arbitrariamente alto, rispetto a fare due tentativi con getMethod?


Se ho capito bene, rispetto alla tua descrizione iniziale mi verrebbe da dire che il numero di varianti
del metodo è comunque noto (nel caso dell'esempio due, visto che fai due tentativi con i try/catch).
Quindi col metodo da te presentato comunque dovresti codificare tutte le varianti,
per cui non cambia granchè rispetto a fare un ciclo..
Recuperando la lista dei metodi oltre che essere più "elegante" ti slega dal dover sapere 
a priori quante varianti esistono.
Probabilmente anche l'uso di una serie di try/catch non è il top dal punto di vista performance.

Davide

unread,
Jan 12, 2012, 11:10:08 AM1/12/12
to jug...@googlegroups.com
C'è comunque una cosa da dire al di la della soluzione tecnica.

Io di solito evito situazione "magiche" dove se non va una prendi l'altra!
Se c'è un bug diventi pazzo!

All'inizio sembrano tecnicamente interessanti ... ma il codice diventa
una giungla!


Perchè non puoi sapere esattamente il parametro? Volendo puoi anche
annotare la classe o derivare l'informazione da qualcos'altro!

Il 12 gennaio 2012 15:38, Michele Lorenzini
<michele....@gmail.com> ha scritto:

Tiziano Lattisi

unread,
Jan 12, 2012, 11:19:13 AM1/12/12
to jug...@googlegroups.com
Si tratta di un class adapter che adatta un controller jpa (da netbeans ide) in
un controller "compatibile" con il mio framework.
Il metodo "find*" usa come chiave primaria Long o Integer
dipendentemente da come è stata definita la tabella, quindi dovrei gestire
le due situazioni.

Chiudo, che devo partire per Povo, dicono ci sia un corso Java base
interessante...

Grazie per i consigli!
t.

--
-- Tiziano Lattisi

Reply all
Reply to author
Forward
0 new messages