package com.dobn.bdgcgl.test;
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 {
/**
*
* @author ym
* @CreateTime 2013-2-28上午09:51:15
* 描述:给一个接口,返回这个接口的所有实现类
*/
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 (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return returnClassList;
}
private 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;
}
}
分享到:
相关推荐
C++:设计一个结构体struct chainNode,再设计一个具体类 class doubleChain 作为抽象类 class linearList的派生类实现类linearList中的所有方法,外加实现双向迭代器; Java:设计一个接口interface linearList,...
ServletContext接口定义了一个Servlet环境对象,这个对象定义了一个在Servlet引擎上的Servlet的视图。通过使用这个对象,Servlet可以记录事件、得到资源并得到来自Servlet引擎的类(例如RequestDispatcher对象)。一...
* 基于位置接口实现的双向链表节点类 */ package dsa; public class DLNode implements Position { private Object element;//数据对象 private DLNode prev;//指向前驱节点 private DLNode next;//指向后继...
所有已知实现类 类/接口声明 类/接口描述 嵌套类摘要 字段摘要 构造方法摘要 方法摘要 字段详细信息 构造方法详细信息 方法详细信息 每个摘要条目都包含该项目的详细描述的第一句。摘要条目按字母顺序排列,而...
所有已知实现类 类/接口声明 类/接口描述 嵌套类摘要 字段摘要 构造方法摘要 方法摘要 字段详细信息 构造方法详细信息 方法详细信息 每个摘要条目都包含该项目的详细描述的第一句。摘要条目按字母顺序排列,而...
所有已知实现类 类/接口声明 类/接口描述 嵌套类摘要 字段摘要 构造方法摘要 方法摘要 字段详细信息 构造方法详细信息 方法详细信息 每个摘要条目都包含该项目的详细描述的第一句。摘要条目按字母顺序排列,而...
所有已知实现类 类/接口声明 类/接口描述 嵌套类摘要 字段摘要 构造方法摘要 方法摘要 字段详细信息 构造方法详细信息 方法详细信息 每个摘要条目都包含该项目的详细描述的第一句。摘要条目按字母顺序排列,而...
所有已知实现类 类/接口声明 类/接口描述 嵌套类摘要 字段摘要 构造函数摘要 方法摘要 字段详细信息 构造函数详细信息 方法详细信息 每个摘要条目都包含该项目的详细描述的第一句。摘要条目按字母顺序排列,而...
•所有已知实现类 •类/接口声明 •类/接口描述 •嵌套类摘要 •字段摘要 •构造方法摘要 •方法摘要 •字段详细信息 •构造方法详细信息 •方法详细信息 每个摘要条目都包含该项目的详细描述的第一句。摘要...
而在Java类库中有一个Arrays类的sort方法已经实现各种数据类型的排序算法。程序员只需要调用该类的方法即可。 代码演示:Arrays实现排序 public static void main(String[] args) { int[] ages={23, 45,12,76,34,...
接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它...
在实现类或结构中定位接口成员的实现的过程称为接口映射。 6,object object 类类型是所有其他类型的最终基类。C# 中的每种类型都是直接或间接从 object 类类型派生的。可以把任何类型的数值给object类型. 7,string...
比如在类Index中的getDictionary方法中,需要返回所有保存的Term,可以直接调用map结构的keySet方法返回一个Set对象,包含了所有的键,也即所有的Term,类似的还有由于实现了子类的compareTo以及equal方法,对于子类...
给定一个C语言函数,要求实现在java类中进行调用。 45.如何获得数组的长度? 46.访问修饰符“public/private/protected/缺省的修饰符”的使用 47.用关键字final修饰一个类或者方法时,有何意义? 48.掌握类和...
是一个接口,本身不能实例化,我们需要定义一个类实现该接口,并重写其定义的accept方法来定义过滤规则。 accept方法用于定义过滤要求,当给定的file对象满足要求就返回true即可。 重载的listFiles方法: ...
类是一个蓝图或样板,定义了某种类型的所有对象的变量和方法。 在 java 语言中,Java 程序的基本单位是类,也就是说:一个 Java 程序是由多个类组成 的。定义一个类与定义一个数据类型是有区别的。在程序设计语言中...
但它是一个抽象的基类,Type有与每种数据类型对应的派生类,我们使用这个派生类的对象的方法、字段、属性来查找有关该类型的所有信息。 获取给定类型的Type引用有3种常用方式: ●使用 C# typeof 运算符。 Type t...
formatter 该属性定义了 Member.getCaption() 方法返回的动作值,这里需要是一个实现了 mondrian.olap.MemberFormatter 接口的类,用来对 Caption 地值进行格式化。 3.6. Join 对于一个 Hierarchy 来说,有两种...
一个什么样的类,这个类实例化出多少个对象,类里面有多少个属性,有多少个方法等等,这就需 要读者通过在实际的开发中就实际问题分析设计和总结了。 类的定义: class 类名{ } 使用一个关键字class 和后面加上一个你...
测试桩实际上是给定接口最简单的实现。例如,测试桩内的方法通常返回硬编码的、无意义的值。 mock类型 描述 测试桩 测试桩实际上是给定接口最简单的...