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

      

  • 相关阅读:
    hdu1561--树形dp<依赖背包>
    hdu--1520--树形dp<写起来就是深搜啊>-<滚动数组优化>
    hdu--1595-另类最短路
    hdu--1599--最小环<会加深你对floyd的理解>
    hdu--1851--尼姆博弈&&巴什博弈<也有人用了sg可惜我还不懂>
    hdu--4920--原来一直写了速度慢的矩阵乘法
    hdu--4912--终于解脱了
    hdu--4947--我太天真了
    hdu--2576--高中数学..
    hdu--2579--第二次与女孩的约会
  • 原文地址:https://www.cnblogs.com/zhangminjie/p/4349170.html
Copyright © 2011-2022 走看看