Torna indietro   Hardware Upgrade Forum > Software > Programmazione

WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà
Un mondo affollato e vivo, personaggi destinati a sparire a fine test e nessuno a inseguire l'oggetto giusto. Beta e stress test di World of Warcraft: Forever hanno fatto emergere un roleplay spontaneo, tra danze a Goldshire e code ordinate ai PNG
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-10-2007, 17:36   #1
x-t
Member
 
Iscritto dal: Sep 2006
Messaggi: 207
[JAVA] invocare classi dinamicamente

Salve a tutti! vi espongo in parole semplici il mio problema.
Supponiamo di avere un'applicazione, che legge da un file di testo un elenco di classi (ad esempio: Questa_classe1.class, Questa_classe2.class, Questa_classe3.class, ecc). Tutte queste classi contengono metodi ecc, che hanno un nome standard, che io conosco (ad esempio variabile1, funzione2(), ecc).

La domanda è semplice: come faccio ad utilizzare questa classe?
Ovvero, io voglio crearmi un oggetto di questa classe e poterne utilizzare le funzioni, i metodi, le variabili, ecc
Sia chiaro che non conosco a priori il nome della classe, ma lo leggo dinamicamente. Ciò che conosco è il nome delle funzioni in esso contenute.

Come si fa?
Vi prego aiutatemi! se volete sarò più chiaro
x-t è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2007, 17:42   #2
isAlreadyInUse
Senior Member
 
L'Avatar di isAlreadyInUse
 
Iscritto dal: Sep 2007
Messaggi: 754
Class.forName(className);
__________________
http://www.tevigroup.it/
isAlreadyInUse è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2007, 17:59   #3
x-t
Member
 
Iscritto dal: Sep 2006
Messaggi: 207
Si già fatto.... mediante questo metodo ho la classe... come posso richiamare i costruttori e i metodi?? Esempio

//file .txt
classe1
classe2
classe3
......
classe200




//CLASSE1
public class classe1{
public static int dd;
public classe1(){}
public String esegui(String kk){

..........





//CLASSE PRINCIPALE (essa richiamerà le classi presenti nel file .txt)
public class Principale{
public static void main(String arg[]){
String hh;

............leggo da file la classe che mi serve e la memorizzo su hh

Class c= Class.forName(hh);

............a questo punto mi servirebbe poter richiamare il metodo esegui dalla classe classe1 e passargli ad esempio la stinga ss, oppure richiamare la variabile statica dd, oppure richiamare il costruttore classe1.... come faccio???



postate un esempio casomai. GRAZIE.
x-t è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2007, 18:05   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da x-t Guarda i messaggi
a questo punto mi servirebbe poter richiamare il metodo
Ti basta usare getMethod() di Class per avere un Method (devi chiaramente specificare i tipi dei parametri). Sull'oggetto Method chiami invoke() per invocare il metodo, specificando gli argomenti. Da notare che se il metodo da invocare è di "istanza", devi passare ad invoke() una istanza dell'oggetto su cui invocare il metodo, altrimenti il reference può anche essere null (tanto è ignorato).

Ti basta leggere bene il javadoc.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2007, 18:10   #5
x-t
Member
 
Iscritto dal: Sep 2006
Messaggi: 207
Magari potresti farmi un esempio modificando quello stesso che ho postato..
così capisco dove sto sbagliando...
GRAZIE...
x-t è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2007, 18:25   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da x-t Guarda i messaggi
Magari potresti farmi un esempio
Codice:
import java.lang.reflect.*;

public class Prova
{
    public static void main (String[] args)
    {
        try
        {
            Class<Prova> c = Prova.class;

            Method m = c.getMethod ("unMetodo", int.class, long.class);

            Prova obj = new Prova ();

            m.invoke (obj, 10, 20L);
        }
        catch (Exception e)
        {
            System.out.println (e);
        }
    }


    public void unMetodo (int a, long b)
    {
        System.out.println (a + " " + b);
    }
}
L'unica cosa particolare che ti segnalo è che io ho usato quello che si chiama "class literal" che è quel Prova.class per ottenere la classe. Nel tuo caso dovrai usare Class<?> c = Class.forName(.....)

Per il resto, come vedi, si tratta di 4 istruzioni in croce.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2007, 18:32   #7
x-t
Member
 
Iscritto dal: Sep 2006
Messaggi: 207
Prova obj = new Prova ();

io non conosco la classe dove ci sono i metodi da richiamare... quindi nn posso usare questo....

magari potresti riprendere il mio esempio così capisco???
GRAZIE
x-t è offline   Rispondi citando il messaggio o parte di esso
Old 23-10-2007, 18:43   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Messaggi: 5206
Quote:
Originariamente inviato da x-t Guarda i messaggi
Prova obj = new Prova ();

io non conosco la classe
Se il metodo è di istanza devi chiaramente creare una istanza della classe.

Codice:
import java.lang.reflect.*;

public class Prova
{
    public static void main (String[] args)
    {
        try
        {
            Class<?> c = Class.forName ("UnaClasse");

            Method m = c.getMethod ("unMetodo", int.class, long.class);

            Object obj = c.newInstance ();

            m.invoke (obj, 10, 20L);
        }
        catch (Exception e)
        {
            System.out.println (e);
        }
    }
}


class UnaClasse
{
    public void unMetodo (int a, long b)
    {
        System.out.println (a + " " + b);
    }
}
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


WoW Forever: la beta è stato uno dei momenti più alti della storia dei videogiochi, e non si ripeterà WoW Forever: la beta è stato uno dei mome...
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
GTA 6 su PC potrebbe arrivare prima del ...
Da zero al tracciato in secondi: LibreCo...
Il regista Rian Johnson lancia a 12,99 d...
Microsoft stravolge l'app Sicurezza di W...
Mercato smartphone in caduta libera: -20...
Android 17 QPR3 Beta 3 riporta il blocco...
Le 10 offerte TOP in Amazon del weekend:...
Dyson, doppio crollo su Amazon: purifica...
Il 70% delle imprese non vede effetti de...
HillMiles MileCity1 a 616€: la city e-bi...
GAC Aion UT, prima prova: tanta roba a 2...
vivo X300 Pro a 979€: il top di gamma co...
AGIBOT fa ballare 110 Expedition A3 per ...
iPad A16 da 11'' scende a 459€ in tutti ...
Mac mini M6 crolla a 899€ (-180€ rispett...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v