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

      

  • 相关阅读:
    设计模式:单一职责原则
    多线程的创建
    Android开发基础(java)14
    面向对象编程的思想(6)
    面向对象编程的思想(5)未完成
    面向对象编程的思想(4)
    面向对象编程的思想(3)
    面向对象编程的思想(2)
    面向对象编程的思想(1)
    GDB 命令详细解释
  • 原文地址:https://www.cnblogs.com/zhangminjie/p/4349170.html
Copyright © 2011-2022 走看看