`
小小虾001
  • 浏览: 9351 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

查找同一包下实现了接口的所有的类

 
阅读更多
package com.cbf4file;

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

public class ClassUtils {


public static List<Class> getAllClassByInterface(Class c){
List<Class> returnClassList = new ArrayList<Class>();

if(c.isInterface()){
String packageName = c.getPackage().getName();
try{
List<Class> allClass = getClasses(packageName);
for(int i=0; i<allClass.size(); i++){
if(c.isAssignableFrom(allClass.get(i))){
if(!c.equals(allClass.get(i))){
returnClassList.add(allClass.get(i));
}
}
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
return returnClassList;
}





public static List<Class> getClasses(String packageName) throws ClassNotFoundException,IOException{

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;
}

}
分享到:
评论

相关推荐

    java 面试题 总结

    当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用...

    java课程实验

    2、以电话为父类,移动电话和固定电话为两个子类,并使移动电话实现接口:可移动。固定电话又有子类:无绳电话。定义接口及各类,明确他们的继承关系。 3、在实验2中所实现的Teacher类的基础上,修改Teacher类的代码...

    超级有影响力霸气的Java面试题大全文档

    当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用...

    net学习笔记及其他代码应用

    当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用...

    同学的打包代码

    定义一个计算器类,该类包括两个组件对象,一个计算引擎和一个用户接口,用户接口对象处理接受的键盘输入信息,并显示答案,计算引擎对象对给出的数据执行相应操作,并存储操作的结果。 3. 设计一个Database类 设计...

    建站之星v2.1最新商业破解版 带1千多套模板

    支付设置 可以设置系统在线支付接口,可以实现客户在线购买产品,实现在线购物。 数据备份/恢复 备份或恢复网站数据库。 图片水印/缩略图 可以为您上传的图片制作水印,自动生成图片缩略图。 广告工具 可以...

    WebIM_Ajax框架

    如果需要使用数据库,请定义一个DAO类(实现IDao接口),替换FileDao; 3.如需进行 Base64 加密,需把 Web.Config 的 Base64 改为 ture;且把 js/config.js 中 base64 赋值为 true (默认为 ture);会有一定的性能...

    计算机二级公共基础知识

    在先左后右的原则下,根据访问根结点的次序,二叉树的遍历分为三类:前序遍历、中序遍历和后序遍历。 (1)前序遍历 先访问根结点,然后遍历左子树,最后遍历右子树;并且在遍历左、右子树时,仍需先访问根结点,...

    最新建站之星2.1商业破解版 带1千多套模板

    支付设置 可以设置系统在线支付接口,可以实现客户在线购买产品,实现在线购物。 数据备份/恢复 备份或恢复网站数据库。 图片水印/缩略图 可以为您上传的图片制作水印,自动生成图片缩略图。 广告工具 可以...

    入门学习Linux常用必会60个命令实例详解doc/txt

    虚拟控制台的切换可以通过按下Alt键和一个功能键来实现,通常使用F1-F6 。 例如,用户登录后,按一下“Alt+ F2”键,用户就可以看到上面出现的“login:”提示符,说明用户看到了第二个虚拟控制台。然后只需按“Alt+...

    数据结构与算法.xmind

    能通过任何一个节点找到其他所有的节点,将两种(双向/单向)链表的最后一个结点指向第一个结点从而实现循环 常见操作 添加数据到链表中 遍历找到尾节点,插入即可(只要while(temp.next != null),...

    仿京东商城购物系统正式版

    鼠标移至大类显示小类:默认只显示大类、鼠标移至大类标题后显示小类 22)商品报价单功能,支持打印和分页,管理员可以关闭商品报价单 23)最近浏览商品功能:用户可以看到自己最近浏览的相关商品 24)商品收藏功能...

    Hellohao全网对象存储图床源码.rar

    把Tbed.jar和application.properties放到服务器你想存放的目录比如/home,注意这两个文件必须要在同一目录下不能分开。 依次运行如下命令: cd /home java -jar Tbed.jar 启动项目 启动后访问地址为:...

    超漂亮的网上购物系统 2012 v1.0 正式版

    鼠标移至大类显示小类:默认只显示大类、鼠标移至大类标题后显示小类 22)商品报价单功能,支持打印和分页,管理员可以关闭商品报价单 23)最近浏览商品功能:用户可以看到自己最近浏览的相关商品 24)商品收藏功能...

    CISCO 技术大集合

    通过使用可变长的子网掩码可以让位于不同接口的同一网络编号的网络使用不同的掩码,这样可以节省IP地址,充分利用有效的IP地址空间。 如下图所示: Router1和Router2的E0端口均使用了C类地址192.1.0.0作为网络地址,...

    ASP网上购物系统旗舰版

    鼠标移至大类显示小类:默认只显示大类、鼠标移至大类标题后显示小类 22)商品报价单功能,支持打印和分页,管理员可以关闭商品报价单 23)最近浏览商品功能:用户可以看到自己最近浏览的相关商品 24)商品收藏功能...

    Hellohao全网对象存储图床源码

    注意这两个文件必须要在同一目录下不能分开。 依次运行如下命令: cd /home Java -jar Tbed.jar 启动项目 启动后访问地址为:http://localhost:8088 , 8088就是你配置server.port=8088的端口. 初始用户名:...

Global site tag (gtag.js) - Google Analytics