Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Java Reflection

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    7

    Java Reflection

    Ciao ragazzi,

    sono nuovo del forum quindi un saluto grande a tutti voi!

    Sono uno sviluppatore Junior Java e mi trovo a dovervi sottoporre il seguente problema:

    si possono dichiarare runtime delle variabili?

    o meglio,

    ho un metodo al quale viene passato un paramentro che rappresenta un tipo Java:

    mioMetodo(String tipoJava), a runtime tipoJava sarà valorizzato per esempio a "java.lang.String"; all'interno di tale metodo è possibile definire una variabile di tipo tipoJava? Se si come si fa?

    Lo so che la domanda è strana...se potete aiutatemi!




    Antonio.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Java Reflection

    Originariamente inviato da Ciciolo
    si possono dichiarare runtime delle variabili?
    Nuove "variabili" no.

    Originariamente inviato da Ciciolo
    ho un metodo al quale viene passato un paramentro che rappresenta un tipo Java:

    mioMetodo(String tipoJava), a runtime tipoJava sarà valorizzato per esempio a "java.lang.String"; all'interno di tale metodo è possibile definire una variabile di tipo tipoJava? Se si come si fa?
    Puoi istanziare un oggetto di quel tipo tramite reflection (sapendo bene quale costruttore usare). Ma non vuol dire che hai fatto una nuova "variabile". Le variabili (locali o di istanza/di classe) sono quelle scritte nel sorgente e note al momento della compilazione.

    codice:
    Class cl = Class.forName(tipoJava);
    Object obj = cl.newInstance();     // usa il costruttore senza argomenti
    E ci sono delle eccezioni da gestire (ho omesso per brevità, vedi javadoc).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    7
    Grazie per la risposta...

    provo a sottoporti un altro quesito, partendo dal presupposto che quello che tu dici è giustissimo...

    e se io una volta instanziato un oggetto:

    Object obj = cl.newInstance();

    volessi dichiarare per esempio un array usando generics così fatto:

    ArrayList<tipo di obj> arrayList=...

    si può fare? in che modo?

    grazie mille.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Ciciolo
    volessi dichiarare per esempio un array usando generics così fatto:

    ArrayList<tipo di obj> arrayList=...

    si può fare? in che modo?
    No, alt. A parte che i "generics" esistono solo a livello di compilazione. Cioè un ArrayList a runtime non è che "è di un tipo". Pertanto non puoi usare la reflection per imporre un tipo dell'ArrayList.

    Si può fare:

    Class cl = Class.forName("java.util.ArrayList");
    ArrayList<String> strList = (ArrayList<String>) cl.newInstance();

    Che però a) causa un warning di unchecked cast e b) comunque non è quello che stavi pensando. Non puoi rendere dinamica (cioè scelta a runtime) la parametrizzazione di un tipo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Come sempre la risposta di andbin è chiara e precisa.
    Aggiungo però che nulla ti vieta di implementare opportunamente tu ad alto livello il meccanismo che hai ipotizzato, e che non ti viene fornito dal linguaggio

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    7
    Ecco, visto che posso anche dire che sto uscendo scemo...come implementereste voi un meccanismo del genere?

    grazie.
    Antonio.

  7. #7
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Prova a essere più preciso su cosa vorresti realizzare...

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    7
    Per farla breve, a lavoro mi hanno chiesto di realizzare una specie di framework o comunque una
    piccola applicazione configurabile che si occupi di fare il dropping degli oggetti HTML.

    In pratica dal file xml che configura questo framework ad un certo punto ricavo da un tag il nome
    di una classe anche personalizzabile dall'utente che utilizza il framework (e.g. it.pippo.pluto.Topolino);
    mi occorre creare in un metodo un array list di oggetti del tipo che leggo in quel tag;
    in questo caso di oggetti di tipo "it.pippo.pluto.Topolino".

    Tra l'altro uno sviluppatore senior che lavora su un altro progetto quindi non direttamente
    coinvolto nel mio mi ha detto che esistono meccanismi per fare una cossa del genere
    ma cercando su internet non trovo nulla che può fare al caso mio

  9. #9
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Ok, ma poi che ci fai con questo array? Voglio dire, è un progetto stand-alone che devi curare interamente tu, oppure ti devi interfacciare con dei componenti sviluppati da qualcun altro?

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2010
    Messaggi
    7
    si interfaccia con dei componenti creati da altri sviluppatori che settano il tipo degli elementi di questo array tramite il file xml che ti dicevo...e poi lo utilizzano per operazioni che non mi riguardano...volendo possiamo metterla sul piano che io devo creare questo strato usufruibile da piu componenti e in pratica questo strato deve ritornare questo array che deve essere de tipo che le componenti stesse indicano...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.