Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Classi che implementano/estendono

0 views
Skip to first unread message

Giambo

unread,
May 17, 2008, 4:01:49 AM5/17/08
to

Qual'e' il modo piu' rapido per avere una lista di classi che
implementano una data interfaccia (O che estendono una data classe) ?

megadix

unread,
May 17, 2008, 4:34:38 AM5/17/08
to
On May 17, 10:01 am, Giambo <ggia...@gmail.nospam.com> wrote:
> Qual'e' il modo piu' rapido per avere una lista di classi che
> implementano una data interfaccia (O che estendono una data classe) ?

Eclipse -> Seleziona classe sul class browser -> F4

Trova anche classi antenate nel classpath.

Se ti interessa farlo via codice devi fare una lunga ricerca nel
classpath, mi sembra ci siano delle Jakarta Commons che fanno il
lavoro ma non mi ricordo quali.

--
www.megadix.it

Davide Consonni

unread,
May 17, 2008, 5:53:49 AM5/17/08
to
Giambo wrote:

>
> Qual'e' il modo piu' rapido per avere una lista di classi che
> implementano una data interfaccia (O che estendono una data classe) ?

via ide o via codice ?

--
Davide Consonni

Andrea Francia

unread,
May 17, 2008, 7:03:11 AM5/17/08
to
Giambo wrote:
>
> Qual'e' il modo piu' rapido per avere una lista di classi che
> implementano una data interfaccia (O che estendono una data classe) ?
Se usi Netbeans: vai sul nome dell'interfaccia e fai tasto destro > Find
Usages ...

Se no lo leggi dal JavaDoc.

Giambo

unread,
May 18, 2008, 11:47:33 AM5/18/08
to
Giambo wrote:

> Qual'e' il modo piu' rapido per avere una lista di classi che
> implementano una data interfaccia (O che estendono una data classe) ?

Scusate l'imprecisione, era via codice :)
Daro' un'occhiata alle Jakarta Commons, ma l'idea di farmi passare tutte
le classi e controllare isAssignableFrom(...) non mi pare il massimo
della performance.
Ora che ci penso: Dove prendo la lista di tutte le classi presenti nel
classpath ?

Andrea Francia

unread,
May 18, 2008, 11:53:59 AM5/18/08
to
Giambo wrote:
> Giambo wrote:
>
>> Qual'e' il modo piu' rapido per avere una lista di classi che
>> implementano una data interfaccia (O che estendono una data classe) ?
>
> Scusate l'imprecisione, era via codice :)
> Daro' un'occhiata alle Jakarta Commons, ma l'idea di farmi passare tutte
> le classi e controllare isAssignableFrom(...) non mi pare il massimo
> della performance.
Ma non c'e' già un metodo nella reflection library di Java?
Tipo cercare in Class#getClasses() non va bene?

> Ora che ci penso: Dove prendo la lista di tutte le classi presenti nel
> classpath ?

Non ti passa piu'.
Devi considerare tutte le classi nel classpath o tutte le classi caricate?

Per curioosità, a che cosa serve tutto questo?

--
Andrea Francia
http://code.google.com/p/remoted-list/ - Lazy loading lists through RMI.

cicap

unread,
May 19, 2008, 2:33:40 PM5/19/08
to
Andrea Francia ha scritto:

> Ma non c'e' già un metodo nella reflection library di Java?
> Tipo cercare in Class#getClasses() non va bene?

Non torna quello che chiede. E' piuttosto complicato e palloso quello
che chiede, e secondo me visto che hanno aggiunto le annotation tanto
vale che inserivano qualche metodo standard per la lettura mirata delle
classi.

>
>> Ora che ci penso: Dove prendo la lista di tutte le classi presenti nel
>> classpath ?
> Non ti passa piu'.

Infatti non e' neanche possibile che io sappia. Se sei in una web
application ce la puoi fare, fermo restando che WEB-INF/classe lo puoi
scannerizzare tutto, mentre WEB-INF/lib no (anzi puoi ma meglio se ti
limiti solo a certi package e sotto package per ovvie ragioni di tempo).

> Devi considerare tutte le classi nel classpath o tutte le classi caricate?

Anche qui ci vedo dei problemi: caricare tutte le classi puo' essere
pericoloso poiche' normalmente non tutte le classi vengono caricate ma
solo quelle necessarie. Se me ne carichi troppe rischi di uscire fuori
memoria (permgen space?).

Ho letto che con JavaAssist si possono leggere alcune informazioni senza
dover caricare la classe in memoria.

>
> Per curioosità, a che cosa serve tutto questo?
>

Secondo me vuole leggere delle annotazioni e configurare si conseguenza.

Giambo

unread,
May 20, 2008, 1:44:06 PM5/20/08
to
Andrea Francia wrote:

>> Ora che ci penso: Dove prendo la lista di tutte le classi presenti nel
>> classpath ?
> Non ti passa piu'.
> Devi considerare tutte le classi nel classpath o tutte le classi caricate?

Potrei semplificare e cercare tutte le classi in un certo package

> Per curioosità, a che cosa serve tutto questo?

Un'applicazione WEB che deve mostrare in un dropdown tutte le possibili
implementazioni di un'interfaccia di validazione dell'input.

Giambo

unread,
May 20, 2008, 1:46:38 PM5/20/08
to
cicap wrote:

> Secondo me vuole leggere delle annotazioni e configurare si conseguenza.

Purtroppo Java 1.4, niente annotations :(
Scannerizzare le classi sotto WEB-INF/classes non credo sia possibile,
dato che l'applicazione non ha accesso al filesystem (?)
Credo che lasciero' perdere, era semplicemente una "figata" in piu' non
vitale :)

cicap

unread,
May 20, 2008, 2:09:56 PM5/20/08
to
Giambo ha scritto:

Si puo' grazie a request.getResourcePaths:

Guarda i metodi

private void webClasses(String prefix, List<Class> list)
e
private void webClasses()

Qui:
https://restfaces.dev.java.net/source/browse/restfaces/trunk/RestFaces/src/main/java/org/restfaces/config/AnnotationConfigReader.java?rev=339&view=markup

Emanuele Gesuato

unread,
May 20, 2008, 6:19:24 PM5/20/08
to
Giambo ha scritto:

Al lavoro usiamo un meccanismo del genere per recuperare tutte le classi
che estendono una determinata classe; adesso non ricordo bene ma credo
che sia utilizzato isAssignableFrom(). La usiamo nelle entità di
business per trovare ad esempio tutte le classi che estendono "Persona"
(PersonaGiuridica, PersonaFisica) programmaticamente.

Alla fin fine non è altro che un metodo ricorsivo che a partire da un
certo package di base (che può essere anche it.* per intenderci) scorre
tutte le classi per trovare quelle che interessano.


Spero di esserti stato utile,
Ciao,
Emanuele

0 new messages