开发者社区> 问答> 正文

java中如何查找某个特定类型作为形参的方法

比如列出以InputStream作为形参的所有方法。
不想自己定义个接口,想找个或者抽象类只有一两个方法的,其中形参是InputStream。不知道咋找合适,也没找到java所有接口和抽象类的列表,不一定要InputStream,Object也行。

展开
收起
蛮大人123 2016-03-04 17:32:26 2102 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪
    public class ClassUtil {
    
        /**
         * 获取同一路径下所有子类或接口实现类
         */
        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;
        }
    
        /**
         * 取得当前类路径下的所有类
         */
        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);
        }
    
        /**
         * 迭代查找类
         * 
         */
        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;
        }
    }
    2019-07-17 18:52:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载