网站首页
网站导航
Ctrl+D收藏
首 页
代码段
源码包
文档库
工具箱
代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
C
】
查找同一包下实现了接口的所有的类
作者:
xiaoxia001
/ 发布于
2013/3/1
/
498
通过传入一个接口类,来查找同一个包下所有实现了此接口的类。(摘录自《大话数据结构》)
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; } }
评论列表
本站所提供的代码,版权归原作者所有,若有侵犯作者版权,请与我们联系,我们将立即删除或修改。谢谢!
本站所有代码发布及提供者。
试试其它关键字
接口的所有的类
同语言下
.
获取手机通讯录 iOS去除数字以外的所有字符
.
异步加载音乐等资源
.
交通罚单管理系统
.
freemark实现,简单的替换
.
计算斐波那契数列
.
base64解码 包括解码长度
.
图像显示
.
冒泡排序
.
输入十进制数,输出指定进制
.
链式栈
可能有用的
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
.
实现对图片上传的接收
.
判断用户输入的是否为IP地址
xiaoxia001
贡献的其它代码
(
2
)
.
excel数据导入到指定的表中
.
查找同一包下实现了接口的所有的类
地图
本站
我们
服务
版权
联系
回馈
博客