Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi
Con la prima rete 5G Standalone attiva in Italia, WINDTRE compie un passo decisivo verso un modello di connettività intelligente che abilita scenari avanzati per imprese e pubbliche amministrazioni, trasformando la rete da infrastruttura a piattaforma per servizi a valore aggiunto
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh
OPPO Find X9 Pro punta a diventare uno dei riferimenti assoluti nel segmento dei camera phone di fascia alta. Con un teleobiettivo Hasselblad da 200 MP, una batteria al silicio-carbonio da 7500 mAh e un display da 6,78 pollici con cornici ultra ridotte, il nuovo flagship non teme confronti con la concorrenza, e non solo nel comparto fotografico mobile. La dotazione tecnica include il processore MediaTek Dimensity 9500, certificazione IP69 e un sistema di ricarica rapida a 80W
DJI Romo, il robot aspirapolvere tutto trasparente
DJI Romo, il robot aspirapolvere tutto trasparente
Anche DJI entra nel panorama delle aziende che propongono una soluzione per la pulizia di casa, facendo leva sulla propria esperienza legata alla mappatura degli ambienti e all'evitamento di ostacoli maturata nel mondo dei droni. Romo è un robot preciso ed efficace, dal design decisamente originale e unico ma che richiede per questo un costo d'acquisto molto elevato
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
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
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
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
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
Città: TO
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, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Wind Tre 'accende' il 5G Standalone in Italia: si apre una nuova era basata sui servizi Wind Tre 'accende' il 5G Standalone in Italia: s...
OPPO Find X9 Pro: il camera phone con teleobiettivo da 200MP e batteria da 7500 mAh OPPO Find X9 Pro: il camera phone con teleobiett...
DJI Romo, il robot aspirapolvere tutto trasparente DJI Romo, il robot aspirapolvere tutto trasparen...
DJI Osmo Nano: la piccola fotocamera alla prova sul campo DJI Osmo Nano: la piccola fotocamera alla prova ...
FUJIFILM X-T30 III, la nuova mirrorless compatta FUJIFILM X-T30 III, la nuova mirrorless compatta
Samsung Galaxy S25 Ultra a 1.099€ su Ama...
OpenAI aggiorna Sora: arrivano i persona...
I TV LG OLED AI B5 scendono di prezzo, d...
Operazione Cagliostro: Voltaiko e lo sch...
9 accessori auto imperdibili oggi su Ama...
Scontro tra giganti: Disney e YouTube TV...
Hyundai accelera sull'idrogeno con un nu...
4 Maxi TV in sconto su Amazon: fino a 75...
Da 579€ a 639€: 3 portatili imperdibili ...
Il nuovo Apple Watch SE 3 scende subito ...
Amazon ha cancellato il nuovo MMO de Il ...
Stranger Things 5: il trailer ufficiale ...
Apple chiude un anno fiscale da record. ...
Windows 11, gli aggiornamenti diventano ...
WhatsApp arriva su Apple Watch: tutte le...
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: 11:40.


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