PDA

View Full Version : Java: come fare per.....


Homodeus
10-12-2002, 14:40
Qualcuno saprebbe dirmi se è possibile (ed in caso affermativo come) recuperare a runtime la classe chiamante di una classe in oggetto....Vi prego è urgente!
Ciao

cn73
10-12-2002, 14:43
Non ho capito bene...vuoi sapere a runtime la classe di appartenenza di un oggetto??

oggetto.getClass().getName();

Altrimenti riformula la domanda...

Homodeus
10-12-2002, 15:19
intanto grazie,
quello che voglio sapere io esattamente è questo:
supponi di richiamare da una classe un metodo di un'altra classe, ebbene io vorrei sapere nella classe il cui metodo è richiamato qual è la classe che l'ha chiamato..Grazie ancora

cn73
10-12-2002, 16:28
La via + semplice è senz'altro quella di aggiungere nella firma del costruttore (o del metodo se ti serve solo li) della seconda classe un parametro di tipo Object.(o più specializzato a seconda delle esigenze);


Object caller=null;

public mySecondaClasse(..... , Object caller);{

caller = _caller;
}


perciò dalla prima classe istanzierai la seconda passando this nel costruttore

mySecondaClasse seconda = new mySecondaClasse(..., this);

Homodeus
10-12-2002, 16:47
ti ringrazio nuovamente per la tua disponibilità..e approfitto della tua gentilezza per incalzarti nuovamente:
sapresti raggiungere lo stesso obiettivo dalla parte del chiamato senza che il chiamante passi la propria istanza?

cn73
10-12-2002, 18:14
Quesito interessante... se provi a spiegarmi le tue esigenze magari mi viene in mente qualcosa...

Comincia a dare un'occhiata ai metodi della classe java.lang.Class, in special modo al metodo getDeclaredClasses()
Returns an array of Class objects reflecting all the classes and interfaces declared as members of the class represented by this Class object.

Canonto
10-12-2002, 18:33
Originariamente inviato da Homodeus
[B]ti ringrazio nuovamente per la tua disponibilità..e approfitto della tua gentilezza per incalzarti nuovamente:
sapresti raggiungere lo stesso obiettivo dalla parte del chiamato senza che il chiamante passi la propria istanza?

lancia un Throwable, prenditi lo stack trace e analizzalo.

cn73
11-12-2002, 10:32
Originariamente inviato da Canonto
[B]

lancia un Throwable, prenditi lo stack trace e analizzalo.
Un po' poco ortodosso, ma non male come idea! :)

Homodeus
11-12-2002, 10:45
Originariamente inviato da Canonto
[B]

lancia un Throwable, prenditi lo stack trace e analizzalo.

Vi ringrazio davvero per i suggerimenti e la cortesia.
Sapresti articolare con qualche ulteriore dettaglio questo suggerimento ?

cn73
11-12-2002, 10:56
Originariamente inviato da Homodeus
[B]

Vi ringrazio davvero per i suggerimenti e la cortesia.
Sapresti articolare con qualche ulteriore dettaglio questo suggerimento ?

Io lo lascerei per ultimo comunque...

cn73
11-12-2002, 11:07
Throwable è la superclasse di Exception e di tutti gli errori che possono verificarsi in JAVA.

Un eccezione può essere lanciata a runtime dalla JVM oppure lanciata dal programmatore con l'istruzione

throw new Exception("Questo è il messaggio");


o new Throwable()...

Le eccezioni sono oggetti veri e proprio...con printStackTrace() ottieni in output tutto lo stack con informazioni + o - significative di come si è generato l'errore... Una cosa tipo:



java.awt.IllegalComponentStateException: component must be showing on the screen
to determine its location
at java.awt.Component.getLocationOnScreen(Component.java:746)
at javax.swing.Autoscroller.mouseDragged(Autoscroller.java:86)
at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:1824)
at java.awt.Component.processEvent(Component.java:2207)
at java.awt.Container.processEvent(Container.java:901)
at java.awt.Component.dispatchEventImpl(Component.java:1812)
at java.awt.Container.dispatchEventImpl(Container.java:946)
at java.awt.Component.dispatchEvent(Component.java:1744)
at javax.swing.plaf.basic.BasicTableUI$MouseInputHandler.repostEvent(Bas
icTableUI.java:377)
at javax.swing.plaf.basic.BasicTableUI$MouseInputHandler.mouseDragged(Ba
sicTableUI.java:438)
at java.awt.AWTEventMulticaster.mouseDragged(AWTEventMulticaster.java:25
7)



Potresti salavare in uno stream lo stack con metodo

printStackTrace(PrintStream s)
Prints this throwable and its backtrace to the specified print stream.
oppure
void printStackTrace(PrintWriter s)
e analizzarlo...


Ti segnalo che dal JDK 1.4 esiste un metodo:
StackTraceElement[] getStackTrace()
Provides programmatic access to the stack trace information printed by printStackTrace().

che rende le cose sicuramente + semplici :D

Canonto
11-12-2002, 11:21
proprio questo ;)

Homodeus
11-12-2002, 12:11
Grazie mille, adesso provo a seguire i vostri consigli..poi vi dico!