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.
>
> 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
Se no lo leggi dal JavaDoc.
> 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 ?
> 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.
> 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.
>> 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.
> 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 :)
Si puo' grazie a request.getResourcePaths:
Guarda i metodi
private void webClasses(String prefix, List<Class> list)
e
private void webClasses()
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