Obtenez un ensemble (ou une collection) de toutes les classes en java.forfait lang


J'écris un compilateur pour Java et j'aimerais implicitement importer java.lang package dans tous les fichiers source (c'est ce que font la plupart des compilateurs Java que je connais).

Pour ce faire, j'ai besoin d'obtenir en quelque sorte un ensemble de toutes les classes (ie., Set<Class<?>>) ou un ensemble de tous les noms qualifiés (ie., Set<String>) de toutes les classes du paquet.

J'ai regardé l'API reflections de cette page, mais la structure de mon projet (et d'autres facteurs) en font un moins que approprié candidat.

Je me demande donc s'il existe un autre moyen d'obtenir de telles classes (autre que le codage en dur de la chose, bien sûr!)? Le fait que java.lang soit le paquet le plus populaire en Java suggère qu'il devrait y avoir un(des) moyen (s).

Author: Andrew Thompson, 2013-02-13

1 answers

Essayer

    String path = Object.class.getResource("Object.class").getPath().replace("!/java/lang/Object.class", "");
    ZipFile z = new ZipFile(new File(new URI(path)));
    Enumeration<? extends ZipEntry> e =z.entries();
    Set<String> s = new HashSet<String>();
    while(e.hasMoreElements()) {
        String n = e.nextElement().getName();
        if (n.matches("java/lang/\\w+\\.class")) {
            s.add(n);
        }
    }
 0
Author: Evgeniy Dorofeev, 2013-02-13 06:16:56