Autore Topic: accedere dinamicamente agli oggetti con stinghe e int  (Letto 1270 volte)

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
accedere dinamicamente agli oggetti con stinghe e int
« il: 14 Settembre 2011, 09:41:35 CEST »
0
Salve in Java non sono un portento e ho dei limiti.  Ho tanta esperienza in Actionscript e devo dire che in tantissimi aspetti è molto simile.

La domanda è come faccio ad usare dinamicamente variabili e oggetti senza usare le Dictionary o senza array. Mi spiego meglio.

Esempio:

Codice (Java): [Seleziona]
private ImageView place1;
private ImageView place2;
private ImageView place3;

Avendo queste 3 variabili dovrei accedervi dinamicamente con un ciclo. Vi mostro come fare in Actionscript.


for(int i=0; i<3; i++){

   this["place"+(i+1).setImageBitmap(bm);
}

In questo modo accedo dinamicamente all' oggetto, cosi lo posso fare anche con le stringhe.. etc etc. Esiste un metodo simile in Java ? Senza array o Dictionary...
La domanda stupida è quella che non si fa

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #1 il: 14 Settembre 2011, 09:46:14 CEST »
0
Se intendi accedere ad un oggetto tramite la stringa del suo ID, avevo fatto lo snippet.

Accedere alle risorse usando la stringa del nome - Android Developers Italia
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #2 il: 14 Settembre 2011, 09:49:12 CEST »
0
No non era questo... era accedere con un nome creato dinamicamente tra più variabili e stringhe... Per semplificare... non so se hai mai usato l' eval in Javascript; è qualcosa di simile
La domanda stupida è quella che non si fa

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #3 il: 14 Settembre 2011, 09:51:35 CEST »
0
No non era questo... era accedere con un nome creato dinamicamente tra più variabili e stringhe... Per semplificare... non so se hai mai usato l' eval in Javascript; è qualcosa di simile

Se intendi il costrutto sintattico dinamico analogo al JavaScript, non credo sia possibile. Ma con lo snippet che ti ho indicato fai la stessa identica cosa (ci accedi dinamicamente a runtime concatenando stringhe), magari in due righe di codice invece che una.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #4 il: 14 Settembre 2011, 09:55:47 CEST »
0
Si lo snippet è utile se si tratta di risorse ma se si tratta di oggetti, stringhe e variabili non funziona... :)

Si sapevo che era impossibile, in Actionscript mi evita tanti if, addirittura posso anche chiamare metodi in questo modo


var metodo:String="stampa";

this[metodo]();

E' comodo ma si sa in ogni linguaggio ci sono pro e contro e diverse logiche ovviamente
La domanda stupida è quella che non si fa

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #5 il: 14 Settembre 2011, 09:57:50 CEST »
0
se devi accedere a elementi che sono variabili di classe, puoi farlo usando la reflection (che è sconsigliata e pesante).
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #6 il: 14 Settembre 2011, 10:01:34 CEST »
0
Si ci avevo pensato...  ma meglio evitare ;)

Grazie.
La domanda stupida è quella che non si fa

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #7 il: 14 Settembre 2011, 10:05:13 CEST »
0
Si lo snippet è utile se si tratta di risorse ma se si tratta di oggetti, stringhe e variabili non funziona... :)

Dall'esempio che avevi portato nel post di apertura avevo capito che ti serviva per gli oggetti.  :-)

NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #8 il: 14 Settembre 2011, 10:14:38 CEST »
0
Si ci avevo pensato...  ma meglio evitare ;)

Grazie.
allora non hai alternative mi sa :D
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #9 il: 14 Settembre 2011, 10:18:56 CEST »
0
Dall'esempio che avevi portato nel post di apertura avevo capito che ti serviva per gli oggetti.  :-)

Beh anche... immagina

Codice (Java): [Seleziona]
private MioOggetto oggetto1= new MioOggetto();

private TuoOggetto oggetto2= new TuoOggetto ();

per accedere all' instanza di questi 2 oggetti dovrei usare un if ma in altri linguaggi mi basterebbe


this["oggetto"+i];


La domanda stupida è quella che non si fa

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #10 il: 14 Settembre 2011, 10:36:08 CEST »
0
per accedere all' instanza di questi 2 oggetti dovrei usare un if ma in altri linguaggi mi basterebbe

Non ho capito in che senso ti serve un if.

NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #11 il: 14 Settembre 2011, 10:40:27 CEST »
0
Immagini di invocare un metodo, usare un ' instanza di un oggetto in base ad un variabilie di tipo int o stringa..., sei costretto ad usare almeno un if.


if(i==0){
usa oggetto1
}

Ecco l' if invece con l' accesso dinamico usi solo una riga

La domanda stupida è quella che non si fa

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #12 il: 14 Settembre 2011, 10:50:16 CEST »
0
Immagini di invocare un metodo, usare un ' instanza di un oggetto in base ad un variabilie di tipo int o stringa..., sei costretto ad usare almeno un if.

if(i==0){
usa oggetto1
}

Ecco l' if invece con l' accesso dinamico usi solo una riga

Ok, ora ho capito.

Però considera che quella che sembra una ottimizzazione è solamente una comodità "cosmetica" del codice, dato che a livello implementativo è molto più efficiente un if. E' un po' il discorso degli array associativi, sono comodissimi e leggibilissimi per il programmatore, ma come prestazioni risentono molto dell'overhead legato alla risoluzione dell'associatività.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline gsources75

  • Utente normale
  • ***
  • Post: 327
  • Respect: +9
    • Google+
    • pepigno75
    • devandroid_it
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Nexus S - Vodafone Smart -BB Bold- Iphone 4-
  • Play Store ID:
    Giuseppe+Sorce
  • Sistema operativo:
    Ubuntu-Windows Seven- Mac Lion
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #13 il: 14 Settembre 2011, 10:54:48 CEST »
0
Si purtroppo hai ragione, ma è molto comodo :).

Grazie
La domanda stupida è quella che non si fa

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:accedere dinamicamente agli oggetti con stinghe e int
« Risposta #14 il: 15 Settembre 2011, 12:33:35 CEST »
0
Permettetemi un ingresso a gamba tesa da cartellino rosso e squalifica per il resto del campionato: "Mi sa tanto di programmazione alla Tafazzi":
Citazione
La caratteristica di Tafazzi è il masochismo. Tafazzi, in calzamaglia nera e sospensorio bianco, saltella colpendosi l'inguine con una bottiglia di plastica e traendo chiaramente piacere da tale pratica.

Actionscript è un linguaggio di script molto povero e limitato. Proprio per aggirare i suoi limiti hai accesso a funzioni di basso livello come quelle che hai citato tu.

Java è un linguaggio ad oggetti di alto livello (anzi, forse è uno dei linguaggi di più alto livello esistente, tanto da non avere accesso ad alcune funzioni).

Utilizzare Java come se fosse Actionscript è, secondo il mio modestissimo parere, una "Programmazione alla Tafazzi".

Il tuo problema è facilmente (ed elegantemente) risolvibile con:

Caso in cui sai a prescindere il numero di oggetti
Codice (Java): [Seleziona]
private MioOggetto[] oggettoArray
che porterebbe ad
Codice (Java): [Seleziona]
oggettoArray[i]
Caso in cui non sai a prescindere il numero di oggetti
Codice (Java): [Seleziona]
private List<MioOggetto> oggettoList
che porterebbe ad
Codice (Java): [Seleziona]
oggettoList.get(i)
Nota che in tutti e due i casi non stai usando if e sopratutto hai un rigoroso controllo in tempo di compilazione su eventuali errori (cosa che con Actionscript non puoi avere, ecco in cosa consiste la "nobiltà" e il livello superiore di Java).

Se proprio vuoi picconarti alla Tafazzi, Java ti mette a disposizione il package java.lang.reflect, ed anche in questo caso Java risulta essere superiore ad Actionscript (gestione eccezioni superiore, performance superiore e anche una maggiore potenza: creazione a runtime di oggetti e tipi). Il tuo problema verrebbe risolto dichiarare le variabili (o meglio gli oggetti) a runtime:
Codice (Java): [Seleziona]
MioOggetto mioOggetto1 = (MioOggetto)Class.forName("MioOggetto").getConstructor().newInstance();
MioOggetto mioOggetto2 = (MioOggetto)Class.forName("MioOggetto").getConstructor().newInstance();

A te la scelta...