Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [Java] Ricerca sottoclassi nel package

    Ho scritto questo metodo che restituisce un array di Class contenente le classi derivate di Ruota (che e' astratta) presenti nel package "ruote":

    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;
        }
    Si accettano commenti, insulti, ortaggi...

    Una cosa che non mi va giu' e' il dovermi riferire esplicitamente a Ruota qui:

    codice:
                if (Ruota.class.isAssignableFrom(ruota)) // ruota e' assegnabile a Ruota
    In pratica manca un equivalente statico del this. Avevo letto che nella JDK 1.5 sarebbe stato reso statico lo stesso this, invece nisba...

    Cmq, facezie a parte, ho scritto un sacco di codice inutile e c'e' un metodo piu' semplice per fare tutto cio'?
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    forse può esserti utile asSubclass

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Se non ho capito male, praticamente fa questo:

    codice:
                if (Ruota.class.isAssignableFrom(ruota)) // ruota e' assegnabile a Ruota
                    istanziabili.add(ruota);
    solo che lancia un'eccezione se una delle classi non e' sottoclasse di Ruota (e almeno una delle classi del package non lo e'...)
    La documentazione e' incomprensibile!

    Grazie, cmq!
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.