|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2009
Messaggi: 129
|
[JAVA] Riflessione (un piccolo aiutino)
salve...vorrei porgere alla vostra attenzione un piccolo quesito.
Allora....ho una variabile Object,in cui a run time verrà inserito un certo Oggetto. Mettiamo caso che l'oggetto inserito a run time sia un "ARTICOLO",la cui interfaccia è le seguente: Codice:
public class Articolo{ private String nome; private int costo; private int codice; private static int quanti=0; public Articolo(String n,int c){ nome=n; costo=c; codice=quanti; quanti++; } public String getNome(){ } public int getCosto(){ } .... .... L'attribuzione del codice,per far si che ogni articolo abbia un identificativo diverso,è realizzato attraverso l'uso di una variabile di classe,che verrà posta uguale alla variabile di istanza codice ed incrementata di una unità. Veniamo al punto: se volessi costruire un Articolo a run time,facendo uso di newInstance() di Class,memorizzerei: 1. i campi col metodo getField() di Class 2. i costruttori di Articolo con getConstructors() di Class Il problema sta qui: con getField() prenderei anche il campo codice,che è una variabile di istanza,però il costruttore di Articolo prende solo due parametri,in quanto codice è settata automaticamente grazie alla variabile di classe quanti. Qualcuno ha qualche suggerimento su come fare a risolvere questo problemino?? Spero di essere stato chiaro. Saluti ![]() Ultima modifica di javacomelava : 06-06-2009 alle 15:37. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Non puoi usare newInstace di getClass perchè Articolo non ha un costruttore vuoto. Dovresti usare newInstance di Constructor. Il Constructor che ci interessa nel caso specifico è quello che ottieniamo con getClass().getConstructor(String.class, int.class). Posto che l'ignota istanza con cui abbiamo a che fare sia un Articolo.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: May 2009
Messaggi: 129
|
50 frustate per me,ho sbagliato a scrivere.Si è come dici tu ovviamente.
Ma come fare a risolvere la questione dei "parametri da passare al costruttore" ? |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Quel problema mi sfugge. Diciamo che se hai un oggetto Class<?> e sai che in quella classe è dichiarato un costruttore che accetta due parametri, uno String e un int, allora ottieni il costruttore con:
Constructor constructor = c.getConstructor(String.class, int.class); Dal costruttore ottieni un'istanza con: Object instance = constructor.newInstance("hello world", 10); Per via del vararg passi i parametri a newInstance di un Constructor come se si trattasse di una normale invocazione di costruttore.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:12.