воскресенье, 12 ноября 2017 г.

How to get all classes in package

package saphsys.tayak;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class PackageClasses {
    
    private static final char PKG_SEPARATOR = '.';
    private static final String CLASS_FILE_SUFFIX = ".class";
    private static final char DIR_SEPARATOR = '/';

    public static List find(String scannedPackage, Class target) throws ClassNotFoundException {
        String scannedPath = scannedPackage.replace(PKG_SEPARATOR, DIR_SEPARATOR);
        List commands = new ArrayList<>();
        URL root = Thread.currentThread().getContextClassLoader().getResource(scannedPath);
        assert root != null;
        File[] files = new File(root.getFile()).listFiles((File dir, String name) -> name.endsWith(CLASS_FILE_SUFFIX));
        for (File file : files) {
            String className = file.getName().replaceAll(".class$", "");
            Class cls = Class.forName(scannedPackage + "." + className);
            if(target.isAssignableFrom(cls)) {
                commands.add(cls);
            }
        }
        return commands;
    }    
}

Комментариев нет:

Отправить комментарий