JAVA获取同一路径下所有子类或接口实现类
来源:互联网 发布:转换音乐格式的软件 编辑:程序博客网 时间:2024/06/01 08:36
整个测试代码如下:
- package find;
- import java.io.File;
- import java.io.IOException;
- import java.net.URL;
- import java.util.ArrayList;
- import java.util.List;
- import find.test.Intf;
- import find.test.Man;
- public class ClassUtil {
- public static void main(String[] args) {
- try {
- System.out.println("接口实现类:");
- for (Class<?> c : getAllAssignedClass(Intf.class)) {
- System.out.println(c.getName());
- }
- System.out.println("子类:");
- for (Class<?> c : getAllAssignedClass(Man.class)) {
- System.out.println(c.getName());
- }
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- /**
- * 获取同一路径下所有子类或接口实现类
- *
- * @param intf
- * @return
- * @throws IOException
- * @throws ClassNotFoundException
- */
- public static List<Class<?>> getAllAssignedClass(Class<?> cls) throws IOException,
- ClassNotFoundException {
- List<Class<?>> classes = new ArrayList<Class<?>>();
- for (Class<?> c : getClasses(cls)) {
- if (cls.isAssignableFrom(c) && !cls.equals(c)) {
- classes.add(c);
- }
- }
- return classes;
- }
- /**
- * 取得当前类路径下的所有类
- *
- * @param cls
- * @return
- * @throws IOException
- * @throws ClassNotFoundException
- */
- public static List<Class<?>> getClasses(Class<?> cls) throws IOException,
- ClassNotFoundException {
- String pk = cls.getPackage().getName();
- String path = pk.replace('.', '/');
- ClassLoader classloader = Thread.currentThread().getContextClassLoader();
- URL url = classloader.getResource(path);
- return getClasses(new File(url.getFile()), pk);
- }
- /**
- * 迭代查找类
- *
- * @param dir
- * @param pk
- * @return
- * @throws ClassNotFoundException
- */
- 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;
- }
- }
运行结果如下:
- 接口实现类:
- find.test.impl.IntfImpl2
- find.test.IntfImpl
- 子类:
- find.test.BadMan
- find.test.impl.GoodMan
- src
- |----find
- |----ClassUtil.java
- |----test
- |----BadMan.java
- |----impl
- | |----GoodMan.java
- | |----IntfImpl2.java
- |----Intf.java
- |----IntfImpl.java
- |----Man.java
0 0
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取同一路径下所有子类或接口实现类
- JAVA获取所有接口的实现类或父类的所有子类(同路径下)
- JAVA获取所有接口的实现类或父类的所有子类(同路径下)
- JAVA-获取实现了指定接口类的所有实现类或继承了指定类的所有子类
- Java 获取接口所有实现类
- 获取全部子类或接口的全部实现
- Java中如何获得所有实现该接口的子类
- Java动态获取某个接口下所有的实现类对象集合
- MATLAB中读取同一路径下所有txt或mat文件的程序
- MATLAB中如何读取同一路径下所有txt或mat文件小程序
- Java中通过修改配置文件实现接口或抽象类子类的切换
- java反射获取某接口的所有实现类
- java对象的强引用,软引用,弱引用和虚引用
- Spring中事件处理的小技巧
- Maven 集成Tomcat插件
- Android 官网的一个OpenGL ES的例子
- PAT 1071. Speech Patterns (25)(统计字符串中词的个数)
- JAVA获取同一路径下所有子类或接口实现类
- 静态库不要strip
- SHELL学习笔记
- android单例模式
- JAVA异步回调解析
- hdu 5023 线段树区间更新+位运算
- asp.net中去掉超级链接图片的边框
- jQuery防止冒泡事件
- Eclipse运行storm-starter