package com.github.coolcooldee.sloth.utils; import com.github.coolcooldee.sloth.generate.strategy.AbstractGeneratorStrategy; import com.github.coolcooldee.sloth.parameter.EnableSupportUserInputPatamter; import com.github.coolcooldee.sloth.generate.strategy.GeneratorStrategy; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; /** * Created by sloth on 16/6/27. */ public abstract class ClassUtil { public static List<Class<?>> getClasses(Class<?> cls) { String pk = cls.getPackage().getName(); String path = pk.replace('.', '/'); ClassLoader classloader = Thread.currentThread().getContextClassLoader(); URL url = classloader.getResource(path); try { return getClasses(new File(url.getFile()), pk); } catch (ClassNotFoundException e) { e.printStackTrace(); } return new ArrayList<>(); } public static List<Class<?>> getAllAssignedClass(Class<?> cls) { List<Class<?>> classes = new ArrayList<Class<?>>(); for (Class<?> c : getClasses(cls)) { if (cls.isAssignableFrom(c) && !cls.equals(c)) { classes.add(c); } } return classes; } private static List<Class<?>> getClasses(File dir, String pk) throws ClassNotFoundException { List<Class<?>> classes = new ArrayList<Class<?>>(); if (!dir.exists()) { return classes; } for (File f : dir.listFiles()) { if (f.isDirectory()) { classes.addAll(getClasses(f, pk + "." + f.getName())); } String name = f.getName(); if (name.endsWith(".class")) { classes.add(Class.forName(pk + "." + name.substring(0, name.length() - 6))); } } return classes; } public static void main(String[] args) throws IllegalAccessException, InstantiationException { List<Class<?>> l = getAllAssignedClass(AbstractGeneratorStrategy.class); for(Class<?> c: l){ EnableSupportUserInputPatamter g = (EnableSupportUserInputPatamter)c.newInstance(); System.out.println(((GeneratorStrategy)g)); } } }