Ho scritto questo metodo che restituisce un array di Class contenente le classi derivate di Ruota (che e' astratta) presenti nel package "ruote":
Si accettano commenti, insulti, ortaggi...codice:public final static Class[] getRuote() { String pacchetto = Ruota.class.getPackage().getName(); // Nome pacchetto String path = Ruota.class.getResource(".").getFile(); // Directory della classe root File dir = new File(path); // Trasforma in File File[] classi = dir.listFiles(); // Leggi tutti i File nella directory ArrayList<Class> istanziabili = new ArrayList<Class>(classi.length); Class ruota=null; for (File f : classi) { String r = pacchetto + '.' + f.getName(); try { ruota = Class.forName(r.replaceFirst(".class","")); } catch (Throwable t) {} if (Modifier.isAbstract(ruota.getModifiers())) continue; if (Ruota.class.isAssignableFrom(ruota)) // ruota e' assegnabile a Ruota istanziabili.add(ruota); } Class[] lista = new Class[istanziabili.size()]; lista = istanziabili.toArray(lista); return lista; }
Una cosa che non mi va giu' e' il dovermi riferire esplicitamente a Ruota qui:
In pratica manca un equivalente statico del this. Avevo letto che nella JDK 1.5 sarebbe stato reso statico lo stesso this, invece nisba...codice:if (Ruota.class.isAssignableFrom(ruota)) // ruota e' assegnabile a Ruota
Cmq, facezie a parte, ho scritto un sacco di codice inutile e c'e' un metodo piu' semplice per fare tutto cio'?

Rispondi quotando
