[Java] Istanziare un oggetto in base ad un variabile

Discussioni su qualunque linguaggio di programmazione o engine
Rispondi
Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

[Java] Istanziare un oggetto in base ad un variabile

Messaggio da Solid Snake »

Salve :cappa:

Mi chiedevo se ci fosse un modo per istanziare un oggetto in base a una variabile evitandomi l'uso di decine di if o switch-case...
Es:

Codice: Seleziona tutto

int var=(int) r.random(10);
MyObject b;

switch(var)
{
   case 1:
   {
       b=new ChildMyObject1(...);
       break;
   }

   case 2:
   {
       b=new ChildMyObject2(...);
       break;
   }

   [...]
}
Tutti gli oggetti che estendono la classe padre hanno gli stessi argomenti...
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
cp94
Moderatore
Messaggi: 2789
Iscritto il: 04/07/2009, 19:18
Specialità: ddd
Località: Brescia
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da cp94 »

Puoi mettere i tuoi oggetti in un array per poi instanziare l'oggetto in questo modo:

Codice: Seleziona tutto

b = new Inst(array[i], ...);
Games you should check out
Naemo
E T U S
Overgravity
Inside the Code

Immagine

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da Solid Snake »

Scusa in che modo? L'array di che tipo deve essere?
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
aironenero
GMI Guru
Messaggi: 2612
Iscritto il: 02/05/2012, 14:56
Specialità: Unity 3D
Uso: GM:Studio 1.4 Pro
Località: Ispica
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da aironenero »

Solid Snake ha scritto:Scusa in che modo? L'array di che tipo deve essere?
l'aaray è di tipo oggetti che vuoi instanziare. i è un numero random che sceglie per l'appunto una delle classi nell'array.
Unity Developer
Immagine
Immagine

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da Solid Snake »

Si ma per istanziare un oggetto, posso solo chiamare il costruttore che a parte i parametri che gli passo è diverso per ogni oggetto...
Es:

Codice: Seleziona tutto

int var=(int) r.random(10);
Figura b;
 
switch(var)
{
   case 1:
   {
       b=new ChildQuadrato(...);
       break;
   }
 
   case 2:
   {
       b=new ChildTriangolo(...);
       break;
   }
 
   [...]
}
EDIT:
Forse è meglio se specifico:
Praticamente io ho una gerarchia di questo tipo

Codice: Seleziona tutto

Padre
     Figlio1
     Figlio2
     Figlio3
Io devo mettere dentro un ArrayList un istanza a caso tra le sottoclassi figlio...
Ovviamente L'ArrayList è di tipo "Padre" ovvero ArrayList<Padre>.

Ora dato che tutti i costruttori delle classi figlio hanno gli stessi parametri, pensavo che esistesse un modo per instanziarli in un modo più semplice...
Casomai mi arrenderò agli switch...
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
aironenero
GMI Guru
Messaggi: 2612
Iscritto il: 02/05/2012, 14:56
Specialità: Unity 3D
Uso: GM:Studio 1.4 Pro
Località: Ispica
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da aironenero »

Solid Snake ha scritto:Si ma per istanziare un oggetto, posso solo chiamare il costruttore che a parte i parametri che gli passo è diverso per ogni oggetto...
Es:

Codice: Seleziona tutto

int var=(int) r.random(10);
Figura b;
 
switch(var)
{
   case 1:
   {
       b=new ChildQuadrato(...);
       break;
   }
 
   case 2:
   {
       b=new ChildTriangolo(...);
       break;
   }
 
   [...]
}
EDIT:
Forse è meglio se specifico:
Praticamente io ho una gerarchia di questo tipo

Codice: Seleziona tutto

Padre
     Figlio1
     Figlio2
     Figlio3
Io devo mettere dentro un ArrayList un istanza a caso tra le sottoclassi figlio...
Ovviamente L'ArrayList è di tipo "Padre" ovvero ArrayList<Padre>.

Ora dato che tutti i costruttori delle classi figlio hanno gli stessi parametri, pensavo che esistesse un modo per instanziarli in un modo più semplice...
Casomai mi arrenderò agli switch...
Fammi capire meglio, hai tre oggetti che ereditano da una classe padre. hanno tutti e tre la stessa firma del costruttore. Non li puoi tenere in memoria come array di padre e usare un indice per istanziare una classe ad una determinata posizione dell'array?
Unity Developer
Immagine
Immagine

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da Solid Snake »

Non lo so... per questo chiedevo... In Java c'è un modo di istanziare in un modo simile ma solo se il costruttore non ha argomenti...
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da Tizzio »

Non conosco così bene java ma non credo si possa fare (almeno come l'hai pensata tu)

Il "compilatore" deve conoscere il tipo dell'oggetto, quindi non puoi avere un tipo "random"
Se proprio vuoi evitare lo switch, dovresti farti una classe generica che in base a un parametro random, assume determinate caratteristiche
(questo parametro lo passi nel constructor)

Avatar utente
civic71
GMI Advanced
Messaggi: 2210
Iscritto il: 23/10/2003, 17:31
Specialità: Risotto con zucchine
Uso: GM:Studio 1.4 Pro
Località: Jesolo (venezia)
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da civic71 »

Non ho ben capito cosa cerchi , forse qualcosa del genere ?

Codice: Seleziona tutto

for (i=0;i<5;i++;){
                   a[i]=instance_create(x,y,obj_yoyo);
                   a[i].bla=2;
}

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da Tizzio »

No pacmino, solid sta cercando qualcosa come

PseudoCode

Codice: Seleziona tutto

objects = [wall, chair, table]

obj = extract_random( objects );

my_instance = new obj(parameter1, parameter2, ..., parameterN);

Avatar utente
aironenero
GMI Guru
Messaggi: 2612
Iscritto il: 02/05/2012, 14:56
Specialità: Unity 3D
Uso: GM:Studio 1.4 Pro
Località: Ispica
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da aironenero »

ma il problema è: mettere il tutto in un array, o instanziare? Perchè nel caso sia istanziare non basta fare

Codice: Seleziona tutto

tipodiarray MiaNuovaIstanzaRandom = new MioArray[indicerandom](parametri...);
(potrei aver sparato una cazzata...)
Unity Developer
Immagine
Immagine

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da Solid Snake »

aironenero ha scritto:ma il problema è: mettere il tutto in un array, o instanziare? Perchè nel caso sia istanziare non basta fare

Codice: Seleziona tutto

tipodiarray MiaNuovaIstanzaRandom = new MioArray[indicerandom](parametri...);
(potrei aver sparato una cazzata...)
No non si puo' fare... Non puoi riempire un array con delle classi e non puoi istanziare un oggetto in quella maniera :asd:
E nemmeno come dice Tizzio...
Vabbe credo che dovrò arrendermi allo switch...
♥♥♥♥♥♥
Immagine
♥♥♥♥♥♥
Spoiler
Immagine

Avatar utente
Breston
Membro
Messaggi: 84
Iscritto il: 21/08/2014, 15:51
Specialità: Nothing
Uso: GM:Studio 2
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da Breston »

cp94 ha scritto:

Codice: Seleziona tutto

b = new Inst(array[i], ...);

Solid Snake
GMI Advanced
Messaggi: 2093
Iscritto il: 19/12/2010, 16:17
Specialità: Programmazione
Uso: GM:Studio 1.4 Standard
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da Solid Snake »

Questa risposta è priva di spiegazione... Cosa dovrebbe contenere l'array? Istanze? Cosa è questo new Inst(...), non ne ho mai sentito parlare...

EDIT: Forse ho trovato

Codice: Seleziona tutto

Class<?> clazz = Class.forName("com.foo.MyClass");
Constructor<?> constructor = clazz.getConstructor(String.class, Integer.class);
Object instance = constructor.newInstance("stringparam", 42);
A quanto pare tramite la classe contructor posso ottenere il costruttore di un oggetto e poi usare newInstance(...) con i parametri necessari...

Avatar utente
Tizzio
GMI Honor
Messaggi: 5836
Iscritto il: 29/06/2010, 23:43
Specialità: programmazione
Contatta:

Re: [Java] Istanziare un oggetto in base ad un variabile

Messaggio da Tizzio »

No, secondo me è giusto invece

Codice: Seleziona tutto

b = new Inst(array[i], ...);

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 20 ospiti