如何反射一个包下的所有类到一个List<Class<

 我来答
彤阳曜
2016-09-24 · 超过135用户采纳过TA的回答
知道小有建树答主
回答量:174
采纳率:0%
帮助的人:190万
展开全部

private static List<Class> getClassesByPackageName(String packageName)
  throws IOException, ClassNotFoundException {
 ClassLoader classLoader = Thread.currentThread()
   .getContextClassLoader();
 String path = packageName.replace('.', '/');
 Enumeration<URL> resources = classLoader.getResources(path);
 List<File> dirs = new ArrayList<File>();
 while (resources.hasMoreElements()) {
  URL resource = resources.nextElement();
  dirs.add(new File(resource.getFile()));
 }
 ArrayList<Class> classes = new ArrayList<Class>();
 for (File directory : dirs) {
  classes.addAll(findClasses(directory, packageName));
 }
 return classes;
}
private static List<Class> findClasses(File directory, String packageName)
  throws ClassNotFoundException {
 List<Class> classes = new ArrayList<Class>();
 if (!directory.exists()) {
  return classes;
 }
 File[] files = directory.listFiles();
 for (File file : files) {
  if (file.isDirectory()) {
   // 递归查找文件夹【即对应的包】下面的所有文件
   assert !file.getName().contains(".");
   classes.addAll(findClasses(file, packageName + '.'
     + file.getName()));
  } else if (file.getName().endsWith(".class")) {
   classes.add(Class.forName(packageName
     + "."
     + file.getName().substring(0,
       file.getName().length() - 6)));
  }
 }
 return classes;
}
public static void main(String[] args) {
 try {
  List<Class> list=getClassesByPackageName("com.test");
  for (int i = 0; i < list.size(); i++) {
   System.out.println(list.get(i).getName());
  }
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (ClassNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
}

这样是获取指定包下的所有类,你拿去用下

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式