PDA

View Full Version : [JAVA] Riflessione (un piccolo aiutino)


javacomelava
06-06-2009, 15:32
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:


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(){
}

....
....


é facile notare che le variabili di istanza sono tre,ma il costruttore prende solo i primi due parametri per costruire un'articolo,ovvero nome e costo.

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 :D

PGI-Bis
06-06-2009, 16:07
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.

javacomelava
06-06-2009, 16:12
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" ?

PGI-Bis
06-06-2009, 22:09
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.