Newsgroup: it.comp.java
Titolo: Domanda su reflection

Ciao a tutti,
supponiamo che abbia la seguente classe col metodo specificato
public class prova
{
    ....
    public String stampa(String[] in)
   {
    ........
  }
}
e volessi invokare il metodo stampa tramite reflection...
come tratto il parametro di tipo String[]
se avessi
    public String stampa(String in)
farei
    Class provaClass = Class.forName("prova");
    Class stringClass = Class.forName("java.lang.String");
    java.lang.reflect.Method stampa =
        provaClass.getDeclaredMethod("stampa",
            new Class[]{stringClass});
    stampa.invoke(null, new java.lang.Object[]{obj});
ma col vettore di String non posso certo fare
    Class stringClass = Class.forName("java.lang.String[]");
e quindi come faccio? qualche indicazione? spulciando sulla documentazione
non ho trovato nulla che facesse a caso mio.....
qualche indicazione?
grazie..
PS: ovviamente l'esempio che vi ho proposto č motlo semplicato...

 
Ciao,
i nomi dei vettori seguono delle convenzioni un po' diverse: un codice
che rappresenta il tipo dei componenti dell'array, preceduto dal
carattere[ (parentesi quadrata aperta).
I codici sono: B (byte), C (char), D (double), F (float), I (int), J
(long), Lnomeclasse; (classi o interfacce. Occhio al punto e virgola, che
ci deve essere), S (short) e Z (boolean).
Nel tuo esempio quindi, un'array di String e' [Ljava.lang.String;
-- 
Lucio Benfante
Brainbench MVP for Java 1
http://www.brainbench.com
MyTranscript: 
http://www.brainbench.com/transcript.jsp?pid=167064

 wrote in message
news:Ng0B9.14750$Yw.6...@news2.tin.it...


 piccola curiosità... dove le trovo ste info? nella specifica della jvm?
Dova le ho trovate io la prima volta fu la guida di JNI - le type 
signatures ricevute sono appunto passate in formato interno dal runtime 
JNI.
Ad esempio
http://java.sun.com/j2se/1.3/docs/guide/jni/spec/types.doc.html#16432
In JVMS, l'informazione c'e' ma e' nascosta e non chiara - nella BNF dei 
tipi dei field del formato classfile. Ma magari e' anche esplicita da 
qualche altra parte e non ho mai notato.
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 
Io le ho trovate in un buon libro ("The Java programming Language" -
Arnold, Gosling & Holmes). Altrove non saprei: ho provato a guardare sia
nella JLS, sia nel Java Tutorial, ma non ho trovato niente di completo.
In ogni caso...se l'unica cosa che ti serve e' un oggetto Class per un
tipo specifico di array, puoi anche scrivere semplicemente:
Class aClass = int[].class
Il che ti fornisce anche un sistema semplice per scoprire come invece
dovresti scrivere il nome per quella classe usando una stringa:
System.out.println(aClass.getName());


 Arnold, Gosling & Holmes). 
Chi non ha letto questo libro e' nello stesso stato di chi lavora con 
C++ e non ha mai letto lo Stroustrup.
uL

Puoi sempre usare un letterale costituito dal nome del tipo seguito da 
.class.
Modificando un po' il tuo esempio:
class Dummy
{
   public void print(String[] strings, int number)
   {
     System.out.println(strings[0] + number);
   }
}
public class Reflect
{
   public static void main(String[] args) throws Exception
   {
     Class dummyClass = Dummy.class;
     Class arrayClass = String[].class;
     Class intClass = int.class;
     java.lang.reflect.Method printMethod =
       dummyClass.getDeclaredMethod
         ("print", new Class[] {arrayClass, intClass});
     Dummy dummyObject = new Dummy();
     printMethod.invoke
       (dummyObject,
       new Object[] {new String[] {"The number is: "}, new Integer(1)});
   }
}
Ciao,
Alberto

C++ e non ha mai letto lo Stroustrup.
oops :-)
--
Rhymes (
rhymes_...@myself.com
)
http://www26.brinkster.com/rhymes
" ride or die "

 
Chiaramente e' una condizione ne' necessaria ne' sufficiente a conoscere 
  bene Java!
uL

 
...ma aiuta! :-)


 C++ e non ha mai letto lo Stroustrup.
Cioe', beato? :)
Ogni volta che prendo in mano lo Strourstoup mi viene nostalgia di K&R.. :)


Ogni volta che prendo in mano lo Strourstoup mi viene nostalgia di K&R.. :)
mitico K&R ce l'ho sempre qui da parte...lo Stroupstrup proprio non mi
va giů...come il C++ del resto :(


 va giů...come il C++ del resto :(
Be', per fortuna il C++ e' meglio di quanto lo faccia apparire Stroustrup 
(che ha anche il cognome piu' distorto della storia dell'informatica ;-)


(che ha anche il cognome piu' distorto della storia dell'informatica ;-)
Per il cognome sono daccordo per il C++ si e no... il C++ ha una
difficoltà intrinseca assurda (specie se sei abituato a vedere le cose
in Delphi, poi in Java (senza dimenticare Python :) e ora in C#....non
so se mi spiego..)


 in Delphi, poi in Java
Be', non se vieni dal C. 


Be', non se vieni dal C. 
Il C non l'ho trovato difficile.... (il problema del C++ non è mica
solo la gestione dei puntatori :)


 K&R.. :)
E tu lascialo in libreria :)
uL

 E tu lascialo in libreria :)
Sullo scaffale, intendi. :) Come dicevi tu, e' un libro da avere - non da 
leggere. ;)


 leggere. ;)
Si, con libreria intendo il mobile, non il luogo :)
uL