Dato:Java getMethod con i parametri superclasse nel metodo
class A
{
public void m(List l) { ... }
}
Diciamo che voglio richiamare il metodo m
con la riflessione, passando un ArrayList come parametro per m
:
List myList = new ArrayList();
A a = new A();
Method method = A.class.getMethod("m", new Class[] { myList.getClass() });
method.invoke(a, Object[] { myList });
La getMethod
on line 3 genererà NoSuchMethodException
perché il tipo di runtime di myList è ArrayList, non List.
Esiste un modo generico per aggirare questo problema che non richiede la conoscenza dei tipi di parametri della classe A?
I miei pensieri esattamente. –
Non conosco il tipo in anticipo. Mi aspetterei 'm2' nel tuo esempio se il mio l.getClass() restituisce ArrayList come tipo di runtime, ma forse mi aspetto troppo? –
esattamente. Ma tu vuoi eseguire il primo metodo a seconda che esista o no il secondo. Non puoi farlo. – Bozho