zoukankan      html  css  js  c++  java
  • 代码片段,得到所有实现接口且在同包下的类

    /**
         * 得到所有实现接口而且在同包下的的类
         * @param aClass
         * @return
         * @throws IOException
         * @throws ClassNotFoundException
         */
        public List<Class> getImplClass(Class aClass) throws IOException, ClassNotFoundException {
            List<Class> list = new ArrayList<>();
            List<Class> resultList = new ArrayList<>();
            String aPackage=aClass.getPackage().getName();
            ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
            Enumeration<URL> enumeration =classLoader.getResources(aPackage.replaceAll("\.","/"));
            while (enumeration.hasMoreElements()) {
                list.addAll(findClass(enumeration.nextElement().getPath(), aPackage));
            }
            for (Class c:list) {
                if (isImplInterface(c) && !aClass.equals(c) && !resultList.contains(c)) {
    
                    resultList.add(c);
                }
            }
            resultList.add(0,Class.forName("com.huawei.SysCode"));
            return resultList;
        }
    
        private boolean isImplInterface(Class aClass) {
            
            Class[] classes=aClass.getInterfaces();
            for (Class c : classes) {
                if(INTERFACE_CLASS.equals(c.getName()) {
                    return true;
                }
            }
            return false;
        }
    
        /**
         * 得到路径下所有class
         * @param dir
         * @param packageName
         * @return
         * @throws ClassNotFoundException
         */
        private List<Class> findClass(String dir, String packageName) throws ClassNotFoundException {
            List<Class> list = new ArrayList<>();
            File f = new File(dir);
            if (!f.exists()) {
                return list;
            }
            File[] files=f.listFiles();
            for (File file : files) {
                if (file.isDirectory())) {
                    list.addAll(findClass(file.getPath(), packageName+"."+file.getName()));
                }else if(file.getName().matches(".+\.class$")){
                    list.add(Class.forName(packageName+"."+file.getName().replaceAll("\.class$","")));
                }
            }
            return list;
        }
    

      

  • 相关阅读:
    python3画聚类树图
    RedHat 7.0 系统 安装
    在VMware vSphere Client安装新的服务器(虚拟机)
    RedHat 7.0 VMware Tools 安装
    RedHat 7.0 Firefox浏览器 安装与更新
    Redhat 7.0 Opera浏览器 安装
    windows 8.1 IE11 和 windows 10 Edge & IE11 FlashPlayer 的安装与卸载
    在Windows和Mac上输入unicode字符
    已知IP 查看hostname
    RedHat 7.0 Chrome浏览器 安装
  • 原文地址:https://www.cnblogs.com/zhangminjie/p/4349170.html
Copyright © 2011-2022 走看看