Newsgroup: it.comp.java
Titolo: nome classe chiamante...

Salve, vorrei sapere da voi se esiste un modo per conoscere il nome della
classe che ha istanziato l'oggetto corrente?
Grazie

 classe che ha istanziato l'oggetto corrente?
Ammenoche' non lo passi in costruzione, no.
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 ha scritto nel messaggio
news:Xns92BE79727178Ecr...@130.133.1.4...


Beh, io all'epoca costruii un framework per il trace che andava ad indagare nello stack di
un eccezione generata ad-hoc e lo trovava. Funziona ancora, ma nel nuovo JDK sono state
inserite delle funzioni apposite per esaminare lo stack (che non mi ricordo quali siano,
sorry, sfoglia la documentazione :-D) e quindi dovrebbe essere un po' rifattorizzato.
In pratica nelle mie classi scrivevo:
public class Pippo
{
 ...
    public Pippo()
    {
        Trace.emit("Sono nel costruttore");
    }
}
Nella console ottenevi qualcosa cosi:
[Pippo] <init> - Sono nel costruttore
Vuoi fare qualcosa del genere? Il tool ce l'ho ancora, se vuoi lo rilavoriamo un po'.
Ciao,
    Bruno.
---
| Bruno Bossola 
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola
|
| Membro del JUG Torino - 
http://www.jugtorino.it
| 

 indagare nello stack di un eccezione generata ad-hoc e lo trovava.
Lui parlava della classe (dell'oggetto) che ha _istanziato_ l'oggetto
corrente. 
Almeno credo. :)



Quello sta nello stack, e' sufficiente che nel costruttore se lo memorizzi da qualche
parte, e quindi puo' evitare di passare esplicitamente l'informazione. Questo
comportamento lo puo' inserire nel costruttore vuoto di un oggetto (TraceableObject?) dal
quale lui eredita oppure lo puo' delegare ad un altro oggetto, invocato nel costruttore.
Il succo e' che si puo' fare, solo che non lo posso fare io al posto suo :-): il mio
framework di trace e' giusto un esempio.


 ha scritto nel messaggio
news:Vo6y9.121612$RO.31...@twister1.libero.it...


 memorizzi [...]
Si', la mia precisazione era per rendere chiaro che non esiste una feature 
del linguaggio che fa quello che lui chiedeva, ovvero - senza lavoro 
preliminare alcuno - recuperare in un punto arbitrario del codice 
nonstatico di un oggetto A la classe dell'oggetto B che ha creato A.
In contrapposizione, ad esempio, in Java e' possibile "senza lavoro 
eccetera" recuperare in un punto arbitrario del codice nonstatico di un 
oggetto A la classe di A. 
Poi, costruirsi, ci si puo' costruire (quasi) di tutto. ;-)



Perche' vuoi farlo? Sei su un terreno minato.
ciao
uL

>     sun.reflect.Reflection.getCallerClass(i);
Ricordiamoci sempre quello che Sun ha detto riguardo le classi del package
sun.*
http://java.sun.com/products/jdk/faq/faq-sun-packages.html
a proposito... qualcuno sa dove sia possibile localizzare qualche genere di
documentazione sulle classi interne?
--
"Lascia che gli eventi seguano la propria strada"
(per rispondere personalmente leva IlDitoDalCulo.)


Lui ti chiedeva una soluzione, io ne ho suggerita una senza costruirgliela ma
suggerendogli una via. Non mi pare che lui abbia espresso la volonta' di non scrivere
codice, semplicemente l'unica cosa che lui non voleva fare e' (cito) "passare il parametro
al costruttore". 



Cool! Mo' mi sparo un bel refactoring sul mio Trace!
Grazie per l'input,


 costruttore". 
Come dicevo, si'. :-)


StackTraceElement[] = new Throwable().getStackTrace();


Cio' non significa che non volesse scrivere codice :-)



Orpo! Ecco com'era! Infatti nel mio vecchio Trace ho proprio un'oggetto che "tokenizza" lo
stacktrace andando ad individuare la classe chiamante, ma ora con questo posso rifarlo
pure stando nelle grazie di mamma sun!
Grazie!


classe che ha istanziato l'oggetto corrente?
Il vero problema č che un metodo ha come concetto di essere
indipendente dal chiamante, se ogni funzione cambiasse forma a seconda
di chi la chiama sarebbe impossibile avere una logica nel tutto.
O meglio, i linguaggi non liberi dal contesto sono molto utili.. ma
sono utili per parlare tra persone, non per dare ordini univoci ad un
computer... per cui la vera domanda non č "come conoscere il nome
della classe che mi ha istanziato?" ma "cosa sto sbagliando nel mio
approccio che mi porta a farmi quella domanda?".
IMHO ovviamente.
--
L a p o   L u c h i n i
l a p o @ l a p o . i t
w w w . l a p o . i t /